Исчерпывающее руководство по написанию всплывающих подсказок - [4]

Шрифт
Интервал

CWebButtonCtrl::OnToolHitTest вызывается функцией CWnd::FilterToolTipMessage, и я переопределил ее реализацию по умолчанию, чтобы заполнить передаваемую ей структуру TOOLINFO. Заполнение структуры происходит только в том случае, если для элемента разрешены подсказки. Подсказка (элемент ToolTip) будет показана на экране только при заполненных полях структуры TOOLINFO. Остальные проверки на NULL и размер структуры – избыточные проверки входных параметров на корректность. После заполнения структуры TOOLINFO функция устанавливает поле rect равным размеру клиентской части кнопки. Другими словами, вся кнопка задается как один инструмент. Полю lpszText присваивается значение LPSTR_CALLBACK, в результате чего элемент ToolTip посылает уведомление TTN_NEEDTEXT, чтобы получить текст подсказки. CWebButtonCtrl::OnToolNeedText обрабатывает это уведомление от элемента ToolTip, копируя строку из m_strToolTipText в поле szText переданной структуры TOOLTIPTEXT.

Как вы видите, эта реализации элемента управления ActiveX основывается на поддержке подсказок классом CWnd. Статья Q141871 базы знаний описывает еще один метод добавления подсказок к элементам ActiveX путем создания объекта класса CToolTipCtrl и вызовом его функций AddTool и UpdateTipText. Версия элемента ActiveX, использующего эту технику, прилагается вместе с исходным кодом (см. статью Q165577). В этом примере размер кода для обоих подходов практически одинаков. Так как далее используется второй вариант реализации подсказок, здесь я хочу полнее раскрыть детали поддержки подсказок классом CWnd.

Хочу предупредить вас об ограниченности моей реализации. Во-первых, проблемы появятся при изменении размеров элемента ActiveX. Размер инструмента не изменится. Эта проблема немного надумана, потому что вы вряд ли будете изменять размеры кнопки после загрузки Web-страницы. Во-вторых, реальному элементу ActiveX понадобится подписать код для создания сертификата аутентификации, иначе любой посетитель этой Web-страницы увидит окно с предупреждением. Наш демонстрационный элемент ActiveX неподписан. В третьих, в кнопку жестко зашита одна картинка. Настоящий элемент ActiveX должен уметь динамически менять картинки на кнопке.

Для добавления ActiveX-элемента на страницу я использовал ActiveX Control Pad, который доступен для бесплатного скачивания по адресу http://www.microsoft.com/workshop/author/cpad/cpad.htm. На рисунке 4 показан сгенерированный этой утилитой HTML-код. В этом коде определяются значения OBJECT ID, WIDTH, HEIGHT, и CLASSID. Также у элемента ActiveX имеется список параметров, или свойств. Параметр ToolTipText (имеющий значение "WebButton ToolTip Test") задает текст подсказки для нашей кнопки. Строка

>