Исчерпывающее руководство по написанию всплывающих подсказок | страница 8
>
является началом короткой процедуры на языке VBScript, которую я написал для обработки нажатия на кнопку. При щелчке на кнопке появляется информационное окно с сообщением "WebButton was clicked".
Добавление DataTips
Демонстрационный проект DTDemo
Элементы DataTips используются для предоставления детальной информации о данных, отображаемых в окне. Например, Microsoft использует DataTips в Visual C++® для показа значений переменных. Вы наводите курсор мыши на переменную во время отладки и видите текущее значение этой переменной в появившейся подсказке. DataTips полезны в любой ситуации, когда об объекте имеется больше информации, чем можно разместить в окне.
В этом примере я использую новые возможности элементов ToolTip, ставшие доступными с появлением IE 4.0 Common Controls DLL, для создания элементов DataTips, в которых содержится информация о нарисованных кругах (см. рис.6). Я создаю круги различных размеров и цветов в случайных местах окна. Когда курсор мыши находится над кругом, появляется многострочный DataTip, в котором указаны координаты центра, радиус и цвет круга. Цвет подсказки соответствует цвету круга. Многострочные подсказки с возможностью изменения цвета текста в них доступны только при инсталлированном IE 4.0.
Рис.6. Пример использования элемента DataTip
С помощью AppWizard я сгенерировал приложение с однодокументным интерфейсом (SDI), отключив опцию "предварительный просмотр при печати" и оставив остальные по умолчанию. Для реализации нужной функциональности я создал или изменил три класса: CCircle, CDTDocument, и CDTView.
CCircle – простой класс, реализующий рисование круга и определение принадлежности точки кругу (hit-testing). Код определения принадлежности точки кругу показан на рис.7. В переменных CCircle::m_CenterPoint, CCircle::m_nRadius, и CCircle::m_Color хранятся, соответственно, координаты центра, радиус и цвет круга. CCircle::Initialize принимает в качестве параметров координаты центра, радиус и цвет и использует их для инициализации соответствующих переменных класса круга. Я предпочел инициализировать переменные класса через функцию CCircle::Initialize, а не через конструктор класса, потому что так легче создавать массив кругов в классе CDTDocument. Все станет понятно, когда мы будем рассматривать класс CDTDocument.
Рис.7. Реализация алгоритма hit-testing в классе CCircle
>///////////////////////////////////////////////////////////////////////////// // CCircle hittesting