Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум «Основы разработки приложений Windows» книга 1.DOC
Скачиваний:
107
Добавлен:
10.05.2014
Размер:
721.41 Кб
Скачать

Всплывающие подсказки

В современных программах, управляемых с помощью меню и инструментальных панелей, принято включать в состав меню всплывающие подсказки – небольшие окошки, открываемые автоматически, когда курсор мыши помещается на соответствующую кнопку инструментальной панели (рис. 3.8).

Рис. 3.8. Всплывающая подсказка в редакторе Microsoft Word

Для организации всплывающих подсказок следует прежде всего создать инструментальную панель, как это было описано в предыдущем подразделе, дополнив ее стиль, указываемый в качестве второго параметра функции CreateToolbarEx(), константойTBSTYLETOOLTIPS. Отслеживание положения курсора мыши и вывод на экран требуемых подсказок осуществляется в ответ на сообщение WindowsWMNOTIFY, для обработки которого оконную функцию следует дополнить соответствующим макросомHANDLEMSG. ФункцияOnNotify(), вызываемая в случае прихода в приложение сообщенияWMNOTIFY, имеет следующий прототип:

LRESULT OnNotify (HWND hwnd, int wParam, LPNMHDR lParam);

Последний параметр этой функции lParamимеет тип указателя на структуруNMHDR. Фактически, однако, этот параметр указывает на бóльшую по объему структуру типаTOOLTIPTEXT, в которую структураNMHDR входит в качестве первого элемента (рис. 3.9).

Таким образом, если использовать параметр lParam непосредственно, он будет служить указателем на структуруNMHDR, и с его помощью можно обращаться к элементам этой структуры, однако остальные элементы структурыTOOLTIPTEXT будут недоступны. Если же преобразовать параметрlParamв типLPTOOLTIPTEXT, то он будет указывать на всю структуруTOOLTIPTEXT, и через него можно получить доступ ко всем элементам этой структуры; через имя вложенной структурыhdr в этом случае можно получить доступ и к элементам структурыNMHDR.

Рис. 3.9. Взаимоотношение структур TOOLTIPTEXT и NMHDR

Таким образом, допустимы, в частности, следующие обращения:

  • lParam->code (lParam – указатель на структуруNMHDR, аcode – элемент этой структуры);

  • lParam->idFrom (та же ситуация);

  • ((LPTOOLTIPTEXT) lParam)->szText(выражение(LPTOOLTIPTEXT) lParamявляется указателем на структуруTOOLTIPTEXT, а szText – элемент этой структуры);

  • ((LPTOOLTIPTEXT) lParam)->hdr.idFrom(обращение к элементам вложенной структуры посредством указателя на внешнюю).

Функция OnNotify() будет вызываться в ответ на все сообщенияWMNOTIFY, однако нас будут интересовать лишь те сообщения, для которых кодcode, входящий в структуруNMHDR,равенTTNNEEDTEXT.Эти сообщения посылаются в приложение, когда курсор мыши устанавливается над какой-либо кнопкой инструментальной панели, и, соответственно, панель нуждается в получении текста подсказки. Поэтому в функцииOnNotify() следует прежде всего отобрать (с помощью оператораif) эти сообщения. Вывод подсказок осуществляется путемкопированиятекста подсказки в элементszText структурыTOOLTIPTEXT. Поскольку для разных кнопок подсказки разные, предложения копирования (посредством функции С++strcpy()) удобно включить в конструкциюswitch-case;операторswitch в этом случае должен анализировать значение элементаidFrom структурыNMHDR, в который поступает идентификатор кнопки, находящейся под курсором мыши.

Таблицы строк и локализация программных продуктов

Выше уже отмечалось, что в качестве ресурсов могут фигурировать самые разные объекты Windows: описания меню и диалогов, растровые изображения, пиктограммы и курсоры и пр. В частности, в виде ресурсов могут быть описаны текстовые строки. Размещение таблиц строк в файле ресурсов позволяет выполнять их редактирование непосредственно в загрузочном файле. Это дает возможность локализовать программные продукты, т. е. переводить используемые в них поясняющие надписи на национальный язык при отсутствии исходного текста программы.

Ресурс - таблица строк описывается следующим образом:

STRINGTABLE {