Операционная система Microsoft Windows 3.1 для программиста -том 3


Системное меню


При необходимости вы можете изменить системное меню (рис. 1.6), добавив в него новые строки или горизонтальные разделительные линии.

Прежде всего вам надо получить идентификатор системного меню. Это можно сделать при помощи функции GetSystemMenu :

HMENU WINAPI GetSystemMenu(HWND hwnd, BOOL fRevert);

Параметр hwnd является идентификатором окна, к системному меню которого требуется получить доступ.

Параметр fRevert определяет действия, выполняемые функцией GetSystemMenu. Если этот параметр указан как FALSE, функция GetSystemMenu возвращает идентификатор используемой на момент вызова копии системного меню. Если же значение этого параметра равно TRUE, функция восстанавливает исходный вид системного меню, используемый в Windows по умолчанию и уничтожает все созданные ранее копии системного меню. В последнем случае возвращаемое значение не определено.

После того как вы получили идентификатор системного меню, вы можете использовать функции AppendMenu, InsertMenu или ModifyMenu для изменения внешнего вида системного меню.

Есть одна особенность, которую нужно учитывать при добавлении собственной строки в системное меню. Как мы уже говорили, младшие четыре бита в сообщении WM_SYSCOMMAND могут иметь любые значения. С учетом этого обстоятельства следует выбирать идентификатор для добавляемой в системное меню строки. Очевидно, что значение этого идентификатора должно быть больше 15 и не должно конфликтовать с идентификаторами других строк меню приложения.

Приложение SMARTPAD, которое мы рассмотрим немного позже, добавляет в системное меню разделительную линию и новую строку, а также блокирует строку "Close", предназначенную для удаления окна.

Вначале в этом приложении мы определяем идентификатор системного меню, вызывая функцию GetSystemMenu:

hmenuSystemMenu = GetSystemMenu(hwnd, FALSE);

Далее к системному меню добавляется разделительная линия и строка "About...", для чего используется уже знакомая вам функция AppendMenu:

AppendMenu(hmenuSystemMenu, MF_SEPARATOR, 0, 0); AppendMenu(hmenuSystemMenu, MF_BYCOMMAND | MF_ENABLED, CM_SYSABOUT, "&About...");




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



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