Главная страница
Навигация по странице:

  • UpdateWindow

  • GetMessage

  • POINT

  • TranslateMessage

  • DispatchMessage

  • Алгоритмизации


    Скачать 1.15 Mb.
    НазваниеАлгоритмизации
    Дата27.09.2022
    Размер1.15 Mb.
    Формат файлаdocx
    Имя файла12_100229_1_124427 (1).docx
    ТипДокументы
    #700459
    страница59 из 67
    1   ...   55   56   57   58   59   60   61   62   ...   67

    Отображениеокна


    К тому времени, когда функция 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.

    1   ...   55   56   57   58   59   60   61   62   ...   67


    написать администратору сайта