В шаблоне меню для каждого пункта хранятся строка с названием пункта и строка с пояснительной информацией о нем. Название любого пункта меню можно получить, используя его команду или номер в подменю при помощи функции GetMenuStringO. Например, следующий вызов функции прочитает в строке MenuString название пункта, который в подменю с дескриптором hMenu находится в позиции номер Pos:
GetMenuString(hMenu. Pos. MenuString. Count. MFJYPOSITION)
Параметром Count задается максимально возможный размер строки. Как обычно, флаг MFJYCOMMAND указывает, что в параметре Pos передается не позиция, а команда меню. Доступ по имени команды значительно проще, так как не требует находить дескриптор нужного подменю. Однако названия самих подменю можно получить, только используя доступ по позиции, так как у подменю нет кода команды.
Проект MenuModif демонстрирует применение рассмотренных средств взаимодействия с меню. В проекте создается окно, показанное на рис. 5.2. Пункты первого подменю File показаны на рисунке, второе подменю Work состоит из пунктов Calculate, Graphics, Table.
Окно разделено по горизонтали на две части. Верхняя часть отведена для движения колеса, которое включается и выключается пунктом Graphics подменю Work. В нижней части отображаются сообщения. При выборе пункта Table подменю Work именно в нее на три секунды выводится информация о пункте. В сообщении указываются название пункта и строка подсказки. Кроме того, при нажатии любой
Создание и использование меню
клавиши клавиатуры в область сообщений выводится код соответствующей виртуальной клавиши.
Подменю Control (на рис. 5.2 оно наложено на изображение окна) предназначено для демонстрации управления подменю File и обучения пользователя приложения. Подменю содержит три пункта. При выборе пункта Обучение программа демонстрирует порядок действий, необходимых для пуска и останова движения колеса, и выводит пояснения в текстовую область. Пункты Load On и Load Off управляют состоянием пункта Load подменю File. Если пункт Load выключен, то его можно включить выбором Load On. При первом вызове подменю Control пункт Load On будет помечен взведенным флажком. Если пункт Load включен, то будет отмечен и активен пункт Load Off. Второй, не отмеченный пункт всегда пассивен. Щелчок на нем не приведет к посылке сообщений в оконную процедуру.