Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 73


В качестве элемента меню используется строка символов Неотмечаемый элемент меню

Как уже было сказано, сначала мы создаем меню с помощью вызова функции CreatePopupMenuQ, которая возвращает нам хэндл созданного меню hFileMenu. В это меню мы с помощью функции AppendMenuQ добавляем два элемента, «Enable exit» и «Exit». Функция AppendMenuQ заслуживает того, чтобы поговорить о ней подробнее.

При вызове функции AppendMenuQ она получает четыре аргумента. Аргумент первый - хэндл того меню, в которое добавляется элемент. Ничего сложного или интересного в этом вызове нет. Второй аргумент -комбинация битовых флагов, определяющих внешний вид и поведение добавляемого элемента меню. Перечень и назначение флагов приведены в табл. 16.

Заметим, что некоторые флаги не могут быть установлены одновре­менно. Например, MF_BITMAP, MF_STRING и MFJPOPUP, MF_ENABLED, MF_DISABLED и MF GRAYED.

Интерпретация третьего параметра зависит от того, установлен ли во втором параметре флаг MF POPUP, т. е. является ли добавляемый эле­мент меню конечным элементом или влечет за собой вызов очередного меню. В первом случае - конечный элемент - параметр содержит иденти­фикатор этого элемента. Если же добавляется меню, то параметр содер­жит хэндл добавляемого меню.

И последний параметр тоже интерпретируется в зависимости от уста­новленных флагов. Установлен флаг MF_BITMAP - параметр содержит хэндл bitmap'а. Установлен флаг MF_STRING - параметр содержит указатель на строку символов. Установлен MF_OWNERDRAW - пара­метр содержит информацию, используемую программой при прорисовке элемента.

Разобравшись с функцией AppendMenuQ, мы можем не останавли­ваться на последующих ее вызовах и остановиться на вызове функции SetMenuQ.

Что означает «создать меню»? Это, как и в случае создания окна, оз­начает всего лишь создание и последующее заполнение некоторых струк­тур в памяти. После создания меню не принадлежит никакому окну и до поры до времени бесполезно блуждает в глубинах памяти. Для того чтобы меню могло выполнять свои функции, оно должно быть «закреплено» за одним из окон. Функция SetMenuQ и привязывает меню к конкретному окну. Аргументы этой функции очевидны - хэндл закреп­ляемого меню и хэндл окна, к которому меню прикрепляется. После вызова этой функции указатель на меню включается в структуру окна и может нормально использоваться.




Начало  Назад  Вперед



Книжный магазин