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



Рис.4. HTML-код для подсказки

>

>

>
Image ToolTip

>

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

Для генерации кода я использовал AppWizard. Я установил флажок "Activate when visible" и отключил все остальные флажки. В опции "Which window class, if any, should this control subclass?" я выбрал BUTTON. AppWizard генерирует массу дополнительного кода, не относящегося к данной статье. В основном, я остановлюсь на коде, добавленном мной в класс CWebButtonCtrl (см. рис.5). Давайте для начала взглянем на пару переменных класса. CWebButtonCtrl::m_bToolTipEnabled устанавливается в TRUE, если подсказки разрешены. В CWebButtonCtrl::m_strToolTipText хранится текст подсказки. Я добавил обе переменные через ClassWizard и они представляют OLE-свойства, автоматические обновляемые библиотекой MFC при их изменении.

Рис.5. CWebButtonCtrl

>// WebButtonCtl.cpp : Implementation of the CWebButtonCtrl OLE control class.


>/////////////////////////////////////////////////////////////////////////////

>// CWebButtonCtrl::RelayToolTipEvent – Pass mouse messages to ToolTip

>void CWebButtonCtrl::RelayToolTipEvent(const MSG* pMsg) {

> MSG MsgCopy;

> ::memcpy(&MsgCopy, pMsg, sizeof(MSG));

> FilterToolTipMessage(&MsgCopy);

>}


>int CWebButtonCtrl::OnToolHitTest(CPoint point, TOOLINFO* pTI) const {

> if (m_bToolTipEnabled && pTI != NULL && pTI->cbSize >= sizeof(TOOLINFO)) {

>  // setup the TOOLINFO structure

>  pTI->hwnd = m_hWnd;

>  pTI->uId = 0;

>  pTI->uFlags = 0;

>  GetClientRect(&(pTI->rect));

>  pTI->lpszText = LPSTR_TEXTCALLBACK;