Читать «Исчерпывающее руководство по написанию всплывающих подсказок» онлайн

Роджер Джек

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

Поддержка подсказок MFC-классами

Простая реализация подсказок с помощью MFC

Добавление подсказок к модальным диалоговым окнам

Добавление подсказок к Web-страницам

Добавление DataTips

Подсказки домашнего изготовления: TitleTips

Заключение

Добавление задержек к подсказкам

Комментарии:

notes

1

2

3

4

5

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

Всплывающие подсказки (ToolTips) облегчают использование приложений. Если вам неясно назначение кнопки на панели инструментов (ToolBar), вы просто наводите на нее курсор мыши и ждете появления подсказки. Конечно, с помощью строки состояния можно получить больше информации, но в случае с всплывающими подсказками вам не приходится опускать взгляд вниз окна.

Существуют также другие виды подсказок: TitleTips – для расширения заголовков элементов управления "список" и "древовидный список", и DataTips – для получения дополнительной информации о данных в окне, и всплывающие подсказки для Web-страниц. Эта статья является подробным учебником по использованию подсказок в ваших приложениях, начиная от добавления простых подсказок средствами MFC до написания своих собственных подсказок. По пути я покажу, как добавлять подсказки к вашим Web-страницам, включая всплывающие подсказки для простого ActiveX-элемента "кнопка". Но прежде чем приступать к обсуждению деталей, давайте посмотрим, какую поддержку всплывающих подсказок предоставляют классы MFC.

Поддержка подсказок MFC-классами

Класс CWnd представляет базовую поддержку добавления подсказок к окну. Рисунок 1 показывает методы CWnd для поддержки подсказок. CWnd::EnableToolTips разрешает или запрещает подсказки для окна, и должна быть вызвана до вызова других методов. Нужно заметить, что в работе CWnd::EnableToolTips есть недостаток: когда вы передаете CWnd::EnableToolTips значение FALSE, этот метод вызывает еще один метод, который посылает сообщение для деактивации элемента ToolTip. Когда же вы вызываете CWnd::EnableToolTip со значением TRUE, он не активирует ToolTip заново.

Рис.1. Поддержка подсказок классом CWnd

Метод Описание

BOOL EnableToolTips(BOOL bEnable)

Разрешает или запрещает подсказки для окна

virtual int CWnd::OnToolHitTest(CPoint point, TOOLINFO* pTI ) const

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

void FilterToolTipMessage(MSG* pMsg)

Проверяет, относится ли сообщение к выводу подсказок

static void PASCAL CancelToolTips(BOOL bKeys)

Прячет подсказку, если она показана на экране

CWnd::OnToolHitTest вызывается непосредственно библиотекой, и вы можете переопределить эту функцию для реализации собственного алгоритма определения контура инструмента. Первый аргумент, point, является координатами курсора в клиентских координатах. Используйте его для сравнения позиции курсора с координатами ваших инструментов (или кнопок). Второй параметр – это уже упоминавшаяся структура TOOLINFO. Далее я покажу, как переопределять функцию CWnd::OnToolHitTest.