// ===================================== // Функция WinMain // ===================================== #pragma argsused
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { MSG msg; // структура для работы с сообщениями HWND hwnd; // идентификатор главного окна приложения
// Регистрация класса aWndClass = RegisterClass(&wc);
return (aWndClass != 0); }
// ===================================== // Функция WndProc // =====================================
LRESULT CALLBACK _export WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { // Сообщение приходит, когда вы нажимаете // на одну из двух созданных кнопок case WM_COMMAND: { // Если нажата первая кнопка, выводим // сообщение if(wParam == IDB_Button1) { MessageBox(hwnd, "Нажата кнопка Button 1", "Message WM_COMMAND",MB_OK); } // Если нажата вторая кнопка, // переводим первую кнопку в нажатое состояние else if(wParam == IDB_Button2) { SendMessage(hButton1, BM_SETSTATE, TRUE, 0L); } // Если нажата третья кнопка, // возвращаем первую кнопку в исходное состояние else if(wParam == IDB_Button3) { SendMessage(hButton1, BM_SETSTATE, FALSE, 0L); } // Если нажата четвертая кнопка, // переводим первую кнопку в неактивное состояние else if(wParam == IDB_Button4) { EnableWindow(hButton1, FALSE); } // Если нажата пятая кнопка, // переводим первую кнопку в активное состояние else if(wParam == IDB_Button5) { EnableWindow(hButton1, TRUE); } return 0; }
В приложении определены идентификаторы пяти кнопок - от IDB_Button1 до IDB_Button5, а также пять переменных для хранения идентификаторов окон класса 'button".
Кнопки создаются точно также, как и в предыдущем приложении. Для каждой кнопки определяется свой идентификатор, с помощью которого функция окна сможет распознать источник сообщения WM_CONTROL.
Далее приложение изменяет параметры для всех пяти кнопок. Конечно, мы могли бы сразу создать кнопки с нужными параметрами, однако задачей нашего приложения является демонстрация средств управления параметрами кнопок и самими кнопками.
Длина первой кнопки увеличивается до 180 пикселов, для чего вызывается функция MoveWindow:
Функция окна обрабатывает сообщение WM_COMMAND, которое может поступать от всех пяти кнопок. Кнопки различаются по параметру wParam.
Если вы нажимаете первую кнопку, на экран выводится диалоговая панель с сообщением.
Если нажать на вторую кнопку (с надписью "DOWN"), функция окна передает сообщение первой кнопке, в результате чего она переходит в нажатое состояние:
SendMessage(hButton1, BM_SETSTATE, TRUE, 0L);
Если нажать на кнопку с надписью "POP", возвращается исходное состояние первой кнопки:
SendMessage(hButton1, BM_SETSTATE, FALSE, 0L);
Кнопка с надписью "OFF" предназначена для перевода первой кнопки в неактивное состояние. Для этого вызывается функция EnableWindow со значением второго параметра, равным FALSE:
EnableWindow(hButton1, FALSE);
И, наконец, последняя, пятая кнопка с надписью "ON" снова возвращает первую кнопку в активное состояние:
EnableWindow(hButton1, TRUE);
Файл определения модуля для приложения BUTNCTL приведен в листинге 2.4.