学习[VC++] MFC如何向 ActiveX 控件添加工具提示(tooltip)
时间:2010-08-23 来源:hobinly
默认情况下, ActiveX 控件不支持工具提示。 但可使用 MFC ActiveX 控件向导生成带tooltip的ActiveX 控件:
1. 通过使用 MFC ActiveX 控件模板创建新 VisualC++ 项目。 命名新控件 Basic。
2. 打开与项目关联 Stdafx.h 文件并添加以下行。
#include <afxcmn.h>
3. 将下行添加到 CBasicCtrl 位于 BasicCtrl.h —— COleControl 派生类。
CToolTipCtrl m_ttip;
void RelayEvent(UINT message, WPARAM wParam, LPARAM lParam);
4. 向 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);
5. 把 WM _ LBUTTONDOWN、 WM _ MOUSEMOVE 和 WM _ LBUTTONUP 消息添加到 ToolTip 控件, 添加处理程序。

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);
}
}
6. 若要完成用户控件的 ToolTip 功能, 在类视图窗口ClassWizard, 单击以下添加属性。
ShowToolTip 是否允许显示 ToolTip
ToolTipText 提示文本
7.当属性改变时,通过OnToolTipTextChanged()和OnShowToolTipChanged() 修改

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();
}
相关阅读 更多 +