Страница: 1 |
Страница: 1 |
Вопрос: Си
Добавлено: 07.07.05 07:27
Автор вопроса: Progos | Web-сайт:
Что в этом коде не так?
Проблема в том, что в текстовом поле ничего не печатается
#include <windows.h>
BOOL InitApp(HINSTANCE);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HWND Forms[65355];
int NumForms;
char const szClassName[] = "WindowAppClass";
char const szWindowTitle[] = "?????? ?????????? ? ??????? ????????????";
int PASCAL
WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow)
{
MSG msg;
HWND hwnd;
if(!InitApp(hInstance)) return FALSE;
hwnd = CreateWindow(szClassName,szWindowTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,0,0,hInstance,NULL);
Forms[0]=hwnd;
CreateWindowEx(0, "BUTTON", "MyButton", WS_CHILD|WS_VISIBLE, 10, 10, 100, 50, hwnd, NULL, hInstance, NULL);
CreateWindowEx(0, "Edit", "MyButton", WS_CHILD|WS_VISIBLE|WS_BORDER, 10, 60, 100, 50, hwnd, NULL, hInstance, NULL);
CreateWindowEx(0,"COMBOBOX","MyButton",WS_CHILD|WS_VISIBLE|WS_BORDER|CBS_DROPDOWN,10,110,100,50,hwnd,NULL,hInstance,NULL);
if(!hwnd)
return FALSE;
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, 0, 0, 0))
{
DispatchMessage(&msg);
}
return msg.wParam;
}
BOOL
InitApp(HINSTANCE hInstance)
{
ATOM aWndClass;
WNDCLASS wc;
memset(&wc, 0, sizeof(wc));
wc.style = 0;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = (LPSTR)NULL;
wc.lpszClassName = (LPSTR)szClassName;
aWndClass = RegisterClass(&wc);
return (aWndClass != 0);
}
LRESULT CALLBACK
WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (msg==WM_DESTROY && hwnd==Forms[0]){
MessageBox(hwnd,"Bye","Bye",MB_OK);
PostQuitMessage(0);
return 0;}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 07.07.05 11:24
гы
На вид все нормально
и в VB6 этот код работает... значит если из-за чего и не работает то только из-за оконной процедуры...
Номер ответа: 2
Автор ответа:
Progos
ICQ: 311715784
Вопросов: 39
Ответов: 157
Web-сайт:
Профиль | | #2
Добавлено: 07.07.05 11:38
Не знаю, может из-за компилятора фигня?
У меня MSVC 6.
А вообще, кстати, какой лучше, Борланда или Мелкософта?
Номер ответа: 3
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 07.07.05 15:46
MSVC++ 2003 рулит.
На этой машине компилятора нет, проверить не могу, на вид похоже на правду.
Номер ответа: 4
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #4
Добавлено: 07.07.05 17:00
{
 ispatchMessage(&msg);
}
А где TranslateMessage?
Номер ответа: 5
Автор ответа:
Progos
ICQ: 311715784
Вопросов: 39
Ответов: 157
Web-сайт:
Профиль | | #5
Добавлено: 07.07.05 19:13
Не знаю, я в Си новичек, чё нашел в примерах, то и наваял
Как именно и куда надо вставить
Номер ответа: 6
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #6
Добавлено: 07.07.05 20:20
Перед DispatchMessage(&msg);
if (!GetMessage (&msg, NULL, 0, 0)) break;
TranslateMessage (&msg);
 ispatchMessage (&msg);
}
Номер ответа: 7
Автор ответа:
Progos
ICQ: 311715784
Вопросов: 39
Ответов: 157
Web-сайт:
Профиль | | #7
Добавлено: 07.07.05 21:14
Спасибо!
Заработало!
У меня еще вопросы:
1.Можно ли создать на форме объект ActiveX OCX, созданный в ВБ?
2. Как создать RichEdit? Пробовал
Номер ответа: 8
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #8
Добавлено: 07.07.05 22:48
- не работает...
Что значит не работает? CreateWindowEx работает всегда. Единственно что от тебя требуется - указать правильные параметры. Который из них неверный? Что возвращает функция? Что возвращает GetLastError?
Может hwnd не валидный.
Может не в нужном месте создаешь контрол (например в WM_CREATE)
Попробуй указать класс "RichEdit20a"
Номер ответа: 9
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #9
Добавлено: 07.07.05 23:28
Слушай, а dll с RichEdit'ом ты вообще загрузил?
hRich = CreateWindowEx(NULL, "RichEdit20A",
NULL,
WS_CHILD|WS_VISIBLE,
10,
10,
300,
500,
hWnd,
NULL,
hInstance,
NULL);
Если dll у тебя Riched32.dll, то класс укажи "RichEdit"
Номер ответа: 10
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #10
Добавлено: 08.07.05 06:30
Грузить ничего не нужно для создания RichEdit.
Что же касается ручного создания контролов на форме... гы гы гы... http://bbs.vbstreets.ru/viewtopic.php?t=9370
Номер ответа: 11
Автор ответа:
Progos
ICQ: 311715784
Вопросов: 39
Ответов: 157
Web-сайт:
Профиль | | #11
Добавлено: 08.07.05 07:23
2HOOLIGAN Спасибо! Точно, надо было dll'ку приставить.
Только при создании с Riched20.dll, при указании стиля WS_BORDER рамка присутсвует,при Riched32.dll - нет.
Номер ответа: 12
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #12
Добавлено: 08.07.05 11:49
У тебя ex-styles в ноль выставлены, а хочешь рамку
Покомбинируй WS_EX_STATICEDGE, WS_EX_CLIENTEDGE, WS_EX_WINDOWEDGE и т.п. (в первый параметр CreateWindowEx)
Номер ответа: 13
Автор ответа:
Progos
ICQ: 311715784
Вопросов: 39
Ответов: 157
Web-сайт:
Профиль | | #13
Добавлено: 09.07.05 07:32
Thanks!