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

Еще одна разновидность ресурсов, которую мы должны сейчас рассмотреть – меню. Меню, предоставляемое Windows имеет иерархическую организацию. Основное меню всегда представлено строкой в верхней части окна, из него могут “выпадать” вертикальные меню, связанные с конкретным пунктом, и так далее - причем все уровни меню, кроме верхнего, представлены вертикальными меню.

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

WM_ENTERMENUIDLE когда меню было активизировано и находится в состоянии ожидания.

WM_MENUSELECT посылается окну, использующему меню, как извещение о выборе пункта меню.

WM_MENUCHAR информирует окно о том, что при работе с меню была нажата кнопка не соответствующая никакому пункту меню. Обрабатывая это сообщение Вы можете вернуть номер пункта меню который надо выбрать, указать Windows о том, что работа с меню закончена или потребовать короткий звуковой сигнал.

WM_COMMAND посылается окну, извещая его о выборе требуемого пункта меню. Параметр wPar содержит идентификатор пункта меню, а lPar равен 0L. Обычно при работе с меню обрабатывается только сообщение WM_COMMAND, остальные применяются в специальных случаях.

Сейчас мы можем подвести некоторый итог под применением сообщения WM_COMMAND, которое может быть получено от дочернего окна, акселератора или меню:

wPar LOWORD(lPar) HIWORD(lPar)
окно Id hWndChild wCode
акселератор Id 0 1
меню Id 0 0

При работе с системным меню вместо сообщения WM_COMMAND мы будем получать сообщения WM_SYSCOMMAND. При описании меню в ресурсе текст описания меню должен размещаться в файле описания ресурсов в следующей форме:

MenuName MENU [load-opt] [mem-opt]

BEGIN

определения пунктов меню 0-го уровня:

MENUITEM для определения пункта

POPUP для определения пункта, связанного с меню следующего уровня

BEGIN

определение пунктов меню 1-го уровня

...

END

END

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

POPUP text [, options]

BEGIN

...

END

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

MENUITEM text, id [, options]

В этих случаях приняты следующие обозначения:

text задает текст пункта меню в виде строки взятой в двойные кавычки, один из символов строки может предваряться символом &, который приводит к подчеркиванию этого символа и его автоматической интерпретации как акселератора.

id определяет идентификатор пункта меню

options указывает на некоторые возможные характеристики данного пункта меню:

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