Программирование для IBM OS2


Изменение системного меню - часть 3


В поле iPosition хранится порядковый номер элемента (т. е. его позиция). Нумерация начинается с нуля. Для обозначения последней позиции (например, при вставке элемента в конец) можно использовать значение MIT_END .

Поля afStyle и afAttribute определяют, соответственно, стиль и атрибуты элемента меню. Здесь вы можете использовать константы с префиксом имени MIS_ и MIA_, описанные в начале этой главы в разделе "Подготовка шаблона меню".

В поле id при добавлении нового элемента необходимо записать его идентификатор. Этот идентификатор будет потом проверяться обработчиком сообщения WM_COMMAND . Если добавляется разделительная линия, в качестве идентификатора можно использовать значение -1.

Если данный элемент является вложенным меню, то в поле hwndSubMenu должен храниться идентификатор окна вложенного меню. Для обычной строки меню здесь располагается значение NULL.

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

Теперь, когда вы познакомились со структурой MENUITEM , покажем, как выполняется добавление строк в меню. Начнем с добавления разделительной линии к системному меню:

mi.afStyle = MIS_SEPARATOR; mi.afAttribute = 0; mi.hwndSubMenu = 0; mi.hItem = 0; mi.id = -1; mi.iPosition = MIT_END; WinSendMsg (hwndSystemSubMenu, MM_INSERTITEM , MPFROMP(&mi), NULL);

Так как мы добавляем разделительную линию, в поле стиля afStyle записываем константу MIS_SEPARATOR . Поля afAttribute, hwndSubMenu и hItem будут иметь нулевые значения.

Разделительная линия не посылает сообщение WM_COMMAND , поэтому ее идентификатор устанавливаем равным -1. Мы решили добавить разделительную линию в конец меню, поэтому устанавливаем позицию, равную MIT_END.

Для добавления строки посылаем окну временного системного меню сообщение MM_INSERTITEM . В качестве первого параметра вместе с этим сообщением необходимо передать адрес подготовленной струткуры MENUITEM , а в качестве второго - текстовую строку, которая будет отображаться в меню.При добавлении разделительной линии текстовая строка не нужна, поэтому второй параметр имеет значение NULL.

Для вставки обычной строки после разделительной линии мы снова готовим структуру MENUITEM и посылаем окну временного системного меню сообщение MM_INSERTITEM :

mi.afStyle = MIS_TEXT; mi.afAttribute = 0; mi.hwndSubMenu = 0; mi.hItem = 0; mi.iPosition = MIT_END; mi.id = IDM_HELP_ABOUT; WinSendMsg (hwndSystemSubMenu, MM_INSERTITEM , MPFROMP(&mi), "Product Information...");

На этот раз в поле стиля находится константа MIS_TEXT, а в поле id - константа IDM_HELP_ABOUT. Во втором параметре сообщения MM_INSERTITEM мы указываем адрес текстовой строки Product Information..., которая будет отображаться в нижней части измененного нами системного меню.




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



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