Консультация № 30610
01.12.2005, 23:19
0.00 руб.
0 3 3
Как на winapi реализовать простую кнопку? В книгах Румянцева и Петцольда про это написано немного криво, то есть описан не совсем, так как бы мне хотелось. В итоге, посмотрел примеры, попробовал создать простую кнопку. Компилятор не ругается, но результат нулевой. Кнопки я не вижу.
Код обычного пустого окна, думаю его приводить не стоит, а код для создания кнопки привел в приложении.


Приложение:
LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam) {//…switch (Message) { case WM_CREATE: hwndButton = CreateWindow("button","My button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 5,5,100,30,hWnd,(HMENU)1, ((LPCREATESTRUCT) lParam)->hInstance, NULL);return 0;//…}Пробовал так же еще такой код:hwndButton = CreateWindow("BUTTON","My button", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE, 5,5,100,30,hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE), NULL);

Обсуждение

Неизвестный
02.12.2005, 00:15
общий
это ответ
Здравствуйте, RedDevil!
А зачем Вам это?
(HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE)
или
((LPCREATESTRUCT) lParam)->hInstance
Поставьте вместо него NULL
Неизвестный
02.12.2005, 08:51
общий
это ответ
Здравствуйте, RedDevil!
В приложении пример, который создает кнобу. Замечу лишь, что запись (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE) необходима в версиях Windows 95/98/Me для передачи хэндла модуля, с которым связано окно, в Windows NT/2000/XP - здесь нужно NULL ставить, т.к. этот параметр игнорируется.

Удачи.

Приложение:
hwndButton = CreateWindow( "BUTTON", "OK", WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, 10, // starting x position 10, // starting y position 100, // button width 100, // button height hwnd, // parent window NULL, // No menu (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL); // pointer not needed
Неизвестный
02.12.2005, 23:03
общий
это ответ
Здравствуйте, RedDevil!
У меня этот код работает, при запуске из OnInitDialog (WM_INITDIALOG)
CreateWindow("BUTTON","My button", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE, 5,5,100,30,m_hWnd, NULL, (HINSTANCE) GetWindowLong(m_hWnd, GWL_HINSTANCE), NULL);
Возможно дело в том, что когда ты пытаешься создать кнопку еще не создано главное окно, т.е. m_hWnd не инициализирован.
Форма ответа