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


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


При получении WM_COMMAND, младшее слово wParam которого равно IDM_Enable_Disable, производятся следующие действия:

с помощью функции EnableMenuItemQ запрещается или делается доступным элемент «Exit»;

с помощью функции ModifyMenuQ изменяется текст элемента, вы­бор которого приводит к состоянию элемента «Exit».

Эти функции достаточно показательны и их разбор поможет читателю еще глубже понять функции, работающие с меню.

Функция EnableMenuItemQ позволяет программисту изменять состоя­ние элемента (разрешенный, запрещенный, «серый») меню по своему усмотрению. При вызове функции, ей передаются три аргумента. Первый аргумент - хэндл того меню, которому принадлежит элемент. В нашем случае меняется состояние элемента, находящегося в меню «File», хэндл которого hFileMenu. Второй аргумент определяет тот элемент, состояние которого изменяется, но каким способом происходит определение, а также в какое состояние переходит элемент, зависит от третьего аргумен­та, который в очередной раз представляет комбинацию битовых флагов.

Возможные флаги приведены в табл. 17.

88

Таблица  17. Флаги, используемые при вызове функции EnableMenuItem()

Флаг

Значение

MF_BYCOMMAND MF_BYPOSITION

MF_ENABLF.D MF_DISABLED MF GRAYED

Изменяемый элемент меню определяется по его идентификато­ру

Изменяемый элемент меню определяется по его номеру (индексу) в меню

После вызова функции элемент становится разрешенным После вызова функции элемент становится запрещенным После вызова функции элемент становится «серым»

После изменения состояния элемента «Exit» с разрешенного на серое и наоборот, необходимо изменить текст в элементе, от которого зависит это состояние. Это изменение производится посредством вызова функции ModifyMenu(), которой передаются пять аргументов. Первые два аргу­мента функционально подобны аргументам EnableMenuItemQ, т. е. пер­вый аргумент - хэндл меню, которому принадлежит изменяемый элемент, а второй аргумент определяет непосредственно изменяемый элемент. Можно было бы сказать, что и третий аргумент функционально подобен, но он представляет собой комбинацию флагов, во-первых, определяющих элемент, подлежащий изменению (MF_BYCOMMAND или MF_BYPOSITION), а во-вторых, определяющих состояние элемента после изменения (перечень этих флагов в точности соответствует приве­денному в табл. 16). Четвертый аргумент указывает или идентификатор измененного элемента, или хэндл нового меню (если, конечно, в третьем аргументе установлен флаг MF_POPUP). И наконец, последний аргумент - новое содержание измененного элемента. В зависимости от того, какой флаг установлен в третьем аргументе (MF_BITMAP, MF^STRING или MF^OWNERDRAW), последний аргумент содержит хэндл bitmap'а, указатель на строку или информацию, используемую при прорисовке элемента.




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



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