Запись главного цикла обработки сообщений


Главный цикл обработки сообщений приложения MDI  похож на цикл не-MDI приложения, который обрабатывает клавиши-ускорители. Различие в том, что цикл обработки сообщений MDI вызывает функцию TranslateMDISysAccel перед проверкой определяемых программой клавиш-ускорителей, или перед диспетчеризацией сообщения.

Пример ниже показывает цикл обработки сообщений типичного MDI приложения.

Обратите внимание! на то, что GetMessage может возвратить значение - (минус)1, если есть ошибка.
Демонстрационный пример
MSG msg;
BOOL bRet;

while ((bRet = GetMessage(&msg, (HWND) NULL, 0, 0)) != 0)
{
    if (bRet == -1)
    {
        // обработка ошибки и возможный выход из программы
    }
    else 
    { 
        if (!TranslateMDISysAccel(hwndMDIClient, &msg) && 
                !TranslateAccelerator(hwndFrame, hAccel, &msg))
        { 
            TranslateMessage(&msg); 
            DispatchMessage(&msg); 
        } 
    } 
}

Функция TranslateMDISysAccel преобразует сообщения WM_KEYDOWN в сообщения WM_SYSCOMMAND и отправляет их активному дочернему окну MDI. Если сообщение -  сообщение не ускорителя MDI, функция возвращает ЛОЖЬ (FALSE), когда прикладная программа использует функцию TranslateAccelerator, чтобы выяснить, обрабатывалась ли какая - либо из определяемых программой клавиша-ускоритель. В противном случае цикл доставляет сообщение в соответствующую оконную процедуру.

Назад в оглавление
На главную страницу

Hosted by uCoz