Инициализация программы

 

 

В файле MDIDEMO.С WinMain начинается с регистрации классов окна для главного окна и двух дочерних окон. Их оконные процедуры называются FrameWndPro c, HelloWndProc и RectWndPro c. Как правило, с каждым из этих трех классов связан свой значок. Для простоты в программе и для главного и для дочерних окон использован стандартный значок IDI_APPLICATION. Обратите внимание, что в поле hbrBackground структуры WNDCLASSEX для класса главного окна задан системный цвет COLOR_APPWORKSPACE. Однако, когда главное окно появляется на экране первым, одинаковый цвет смотрится несколько лучше.

 

 

В поле lpszMenuName заносится значение NULL для каждого из трех классов окна. Для классов окна дочерних окон Hello и Rect это нормально. Для главного окна это сделано для того, чтобы указать описатель меню при создании главного окна в функции CreateWindo w.

 

 

Далее WinMain использует функцию LoadMenu для загрузки трех меню и сохраняет их описатели в глобальных переменных. Три вызова функции GetSubMenu позволяют получить описатели подменю Window, в которому будет добавлен список окон документов. Они также запоминаются в глобальных переменных. Функция LoadAccelerators загружает таблицу быстрых клавиш.

 

 

Вызов функции CreateWindow в WinMain создает главное окно. При обработке в FrameWndProc сообщения WM_CREATE главное окно создает окно - администратор. При этом еще раз вызывается функция CreateWindo w. Класс окна задается как MDICLIENT, который представляет собой уже зарегистрированный в системе класс для окна - MDI. Последний параметр функции CreateWindow должен быть указателем на структуру типа CLIENTCREATESTRUCT. В этой структуре имеется два поля:

 

 

hWindowMenu является описателем подменю, в котором появится список документов. В программе MDIDEMO это описатель hMenuInitWindo w, полученный в WinMai n. Позже мы узнаем, как изменить меню.

 

 

idFirstChild является идентификатором меню , относящимся к первому окну документа в списке документов.

 

 

Он просто равен IDM_FIRSTCHILD.

 

 

Вернемся к WinMai n. Программа MDIDEMO выводит на экран только что созданное главное окно и входит в цикл обработки сообщений. Этот цикл обработки сообщений немного отличается от обычного: после получения сообщения из очереди при помощи функции GetMessage программа MDI передает сообщение функции TranslateMDISysAccel (функции TranslateAccelerato r, если, как и в программе MDIDEMO, в программе также имеются быстрые клавиши меню ).

 

 

Функция TranslateMDISysAccel преобразует любые комбинации клавиш, которые могут соответствовать специальным быстрым клавишам MDI (<Ctrl>+<F6>), в сообщение WM_SYSCOMMAND. Если одна из


– 95 –

 

 

функций TranslateMDISysAccel или TranslateAccelerator возвращает TRUE (означает, что сообщение было преобразовано одной из этих функций ), то вызова функции TranslateMessage и функции DispatchMessage не происходит.

 

 

Обратите внимание на два описателя окон, передаваемые функциям TranslateMDISysAccel и TranslateAccelerato r: соответственно hwndClient и hwndFram e. Функция WinMain получает описатель окна hwndClien t, используя вызов функции GetWindow с параметром GW_CHILD.

 

 








Дата добавления: 2016-11-22; просмотров: 552;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.