默认情况下,ActiveX 控件不支持工具提示。下面的步骤,但是,演示如何修改生成使用 MFC ActiveX 控件向导来添加该支持基本的 ActiveX 控件:
- 通过使用 MFC ActiveX 控件模板来创建新的 Visual C++ 项目。将新控件命名为Basic
- 打开与该项目相关联的 Stdafx.h 文件并添加下面的行。
#include <afxcmn.h>
- 位于 BasicCtrl.h 的 CBasicCtrl COleControl 派生的类中添加以下行。
CToolTipCtrl m_ttip; void RelayEvent(UINT message, WPARAM wParam, LPARAM lParam);
- 将 WM_CREATE 消息处理程序添加到 CBasicCtrl 消息映射中。若要执行此操作,请单击在类视图窗口中选择 CBasicCtrl。CBasicCtrl 节点处于选中状态,打开属性窗口,然后单击要选择的邮件。找到 WM_CREATE 的邮件,然后再添加一个 OnCreate 方法来处理该消息。它是此例程中将创建工具提示控件。将下面的代码添加到该处理程序。
if (!m_ttip.Create(this)) TRACE0("Unable to create tip window."); else if (!m_ttip.AddTool(this, LPCTSTR(m_ToolTipText))) TRACE0("Unable to add tip for the control window."); else m_ttip.Activate(m_ShowToolTip);
- 为中继到该工具提示控件相应的消息,添加 WM_LBUTTONDOWN、 WM_LBUTTONUP,和 WM_MOUSEMOVE CBasicCtrl 消息映射到处理程序。这些处理程序的代码后面。
void CBasicCtrl::OnLButtonDown(UINT nFlags, CPoint point) { RelayEvent(WM_LBUTTONDOWN, (WPARAM)nFlags, MAKELPARAM(LOWORD(point.x), LOWORD(point.y))); COleControl:: OnLButtonDown(nFlags, point); } void CBasicCtrl::OnLButtonUp(UINT nFlags, CPoint point) { RelayEvent(WM_LBUTTONUP, (WPARAM)nFlags, MAKELPARAM(LOWORD(point.x), LOWORD(point.y))); COleControl::OnLButtonUp(nFlags, point); } void CBasicCtrl::OnMouseMove(UINT nFlags, CPoint point) { RelayEvent(WM_MOUSEMOVE, (WPARAM)nFlags, MAKELPARAM(LOWORD(point.x), LOWORD(point.y))); COleControl::OnMouseMove(nFlags, point); } // implementation of the CBasicCtrl::RelayEvent method: void CBasicCtrl::RelayEvent(UINT message, WPARAM wParam, LPARAM lParam) { if (NULL != m_ttip.m_hWnd) { MSG msg; msg.hwnd= m_hWnd; msg.message= message; msg.wParam= wParam; msg.lParam= lParam; msg.time= 0; msg.pt.x= LOWORD (lParam); msg.pt.y= HIWORD (lParam); m_ttip.RelayEvent(&msg); } }
- 通过添加代码以初始化的 m_ToolTipText 和 m_ShowToolTip 属性来修改 CBasicCtrl::DoPropExchange。
PX_Bool(pPX, _T("ShowToolTip"), (BOOL&)m_ShowToolTip, FALSE);//In order to view tooltip, this must be true. PX_String(pPX, _T("ToolTipText"), m_ToolTipText, _T("")); //And we need to add some text in _T(“ ...”)
- 若要允许该用户控件的某些控制工具提示功能,请向 CBasicCtrl 类中添加以下的自动化属性。为此,请在类视图窗口中选择 BasicLib (此节点将显示有关该项目的 IDL 文件的类视图信息)。打开此节点,然后用鼠标右键单击主接口节点 (_DBasic)。单击添加,然后单击添加属性。添加列出的参数具有以下两个属性:
Property Name: ShowToolTip ToolTipText Property Type: VARIANT_BOOL BSTR Variable name: m_ShowToolTip m_ToolTipText Notification function: OnShowToolTipChanged OnToolTipTextChanged
- 按以下方式修改这些属性的属性更改通知函数。
void CBasicCtrl::OnToolTipTextChanged() { if (m_ttip.m_hWnd && AmbientUserMode()) { m_ttip.UpdateTipText(LPCTSTR(m_ToolTipText), this); SetModifiedFlag(); } } void CBasicCtrl::OnShowToolTipChanged() { if (m_ttip.m_hWnd && AmbientUserMode()) { m_ttip.Activate(m_ShowToolTip); SetModifiedFlag(); } }
原链接:http://support.microsoft.com/kb/141871/zh-cn