Алгоритмизации
Скачать 1.15 Mb.
|
ОтображениеокнаК тому времени, когда функция CreateWindowвозвращает управление программе, окно уже создано внутри Windows, однако на экране монитора оно еще не появилось. Выводит окно на экран функция ShowWindow(hwnd, iCmdShow); параметр hwnd– описатель созданного окна; параметр iCmdShow– задает начальный вид окна на экране: SW_SHOWNORMAL (1) – на экран выводится обычное окно, фон рабочей области закрашивается заданной в классе окна кистью; SW_SHOWMINNOACTIVE (7) – окно не выводится, а на панели задач появляются его имя и иконка. Функция UpdateWindow (hwnd); выполняет перерисовку рабочей области окна, посылая сообщение WM_PAINT в оконную процедуру (WndProc). ЦиклобработкисообщенийПрограмма получает информацию от пользователя через клавиатуру и мышь. Для каждой программы, работающей в данный момент, Windows поддерживает «очередь сообщений» (message queue). Когда происходит ввод информации, она преобразуется в «сообщение», которое помещается в эту очередь. Приложение6 Программа извлекает сообщения из очереди, выполняя блок соответствующих команд, известный как «цикл обработки сообщений» (message loop): while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; Переменная msg– структура типа MSG, определенная следующим образом: typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; Тип данных POINTопределяется как typedef struct tagPOINT { LONG x; LONG y; } POINT; Вызов функции GetMessage(&msg, NULL, 0, 0); извлекает сообщение из очереди и вWindowsпередается указатель на структуру msg; второй, третий и четвертый параметры (NULL или 0) показывают, что программа получает все сообщения от всех окон. Система Windowsзаполняет поля структуры сообщений информацией об очередном сообщении из очереди. Поля этой структуры следующие: hwnd– описатель окна, для которого предназначено сообщение; message– идентификатор сообщения, который задается в заголовочных файлах и начинается с префикса WM (оконное сообщение – windowmessage); wParam– 32-разрядный параметр сообщения, смысл и значение которого зависят от особенностей сообщения; lParam– 32-разрядный параметр, зависящий от сообщения; time– время, когда сообщение было помещено в очередь; pt– координаты курсора в момент помещения сообщения в очередь. Если поле messageсообщения, извлеченного из очереди, равно любому значению, кроме WM_QUIT(0x0012), то функция GetMessage возвращает ненулевое значение; сообщение WM_QUIT прерывает цикл обработки сообщений – программа заканчивается, возвращая число wParam структуры msg. Приложение6 Функция TranslateMessage(&msg); передает структуру msgобратно в Windowsдля преобразования сообщения. Функция DispatchMessage(&msg); передает структуру msg для ее обработки соответствующей оконной процедурой (WndProc). После того как WndProcобработает сообщение, оно возвращается вWindows, которая все еще обслуживает вызов функции DispatchMessage. Когда Windows возвращает управление в программу к следующему за вызовом DispatchMessage коду, цикл обработки сообщений в очередной раз возобновляет работу, вызываяGetMessage. |