Окт 16

Процедура однозначной идентификации пунктов-подменю

Для пунктов-подменю, принадлежащих меню нулевого уровня, в качестве идентификаторов используются индексы, присваиваемые им Windows, то есть 0, 1, 2 и т. д. Эти значения содержатся в младшем слове параметра wParam сообщения WM_MENUSELECT.
Для пунктов-подменю, принадлежащих некоторому меню первого уровня, уникальный идентификатор формируется на базе индекса itemID, извлекаемого из младшего слова параметра wParam, посредством добавления соответствующего смещения:
itemID += 100 (submenuID + 1);
где submenuID — индекс рассматриваемого подменю в меню нулевого уровня.
Таким образом, для меню первого уровня с нулевым индексом (submenuID=0) входящие в него пункты-подменю получат номера 100, 101, 102 и т. д. Для меню первого уровня с единичным индексом входящие в него пункты-подменю получат номера 200, 201, 202 и т. д. Такие же идентификаторы мы будем использовать и для строк в таблице строк приложения.
Из принятого нами ограничения на количество уровней меню вытекает, что все пункты второго (последнего) уровня являются пунктами-командами и поэтому имеют уникальные идентификаторы.
Получив в результате обработки сообщения WM_MENUSELECT уникальный идентификатор пункта меню itemID, мы можем извлечь из таблицы строк соответствующую символьную строку в текстовый буфер text, а затем отобразить этот текст в строке состояния, которая работает в простом режиме. Это может быть реализовано следующими инструкциями:
SendMessage(hwndStatusBar. SB_SIMPLE, TRUE. 0); LoadString(GetModu1eHand1e(NULL), itemID. text. 200); SendMessage(hwndStatusBar. SB_SETTEXT. 255. (LPARAM)text):
Для демонстрации предложенной технологии разработаем приложение StatusBar, являющееся модификацией приложения Toolbar. В результате доработки к программе будет добавлена строка состояния, работающая в простом и стандартном режимах.