Учебное пособие: Подклассы окон

INACTIVE пункт меню неактивен (его нельзя выбрать), но рисуется обычным способом

GRAYED пункт меню неактивен и нарисован серым цветом

MENUBREAK пункт меню размещен либо в новой строке (для уровня 0), либо в новом столбце.

MENUBARBREAK то же, что и MENUBREAK, но столбец (строка) отделяется сплошной чертой

HELP обозначает пункт меню, связанный с подсказкой.

Для использования меню совместно с окном мы можем воспользоваться любым удобным способом:

1) при регистрации класса окна мы можем указать имя требуемого ресурса. Тогда все окна этого класса при создании получат указанное меню.

2) мы можем указать хендл меню при создании окна, тогда это окно будет создано с указанным меню.

3) в любой момент мы можем вызвать функцию

BOOL SetMenu( hWnd, hMenu );

с помощью которой мы можем установить новое меню, заменить одно на другое или удалить имеющееся (указав hMenu=NULL).

Во время работы мы можем легко получить хендл меню, используемого данным окном:

HMENU GetMenu( hWnd );

и, зная хендл меню, столь же легко можем узнать хендл меню следующего уровня:

HMENU GetSubMenu( hMenu, nPos );

здесь параметр ‘nPos’ указывает номер пункта меню, связанного с меню следующего уровня.

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

HMENU CreateMenu( void );

Кроме того мы можем узнать хендл системного меню данного окна:

HMENU GetSystemMenu( hWnd, FALSE );

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

1) по его идентификатору (пункт, связанный с меню следующего уровня не имеет идентификатора, поэтому не может быть указан этим способом).

При выборе этого способа Вы должны указать флаг MF_BYCOMMAND при указании пункта меню.

2) по его номеру в меню. В этом случае Вы должны указать флаг MF_BYPOSITION при задании пункта.

При необходимости корректировать меню мы можем воспользоваться следующими функциями:

BOOL AppendMenu( hMenu, nFlags, idNew, lpszNewName );

BOOL InsertMenu( hMenu, idItem, nFlags, idNew, lpszNewName );

BOOL ModifyMenu( hMenu, idItem, nFlags, idNew, lpszNewName );

BOOL DeleteMenu( hMenu, idItem, nFlags );

К-во Просмотров: 587
Бесплатно скачать Учебное пособие: Подклассы окон