Visual Studio .NET 2002Visual C++ 7.1Visual C++ 8.0Visual Studio 6Windows VistaVisual C++ 7.0Visual Studio .NET 2003Windows 2003Visual Studio 2005Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
在自己的控件上创建即时工具提示






3.52/5 (8投票s)
2007年3月16日

43475

1562
在您的控件(如树形控件)上创建就地工具提示非常容易。
引言
在您的控件(如树形控件)上创建就地工具提示非常容易。
使用代码
步骤 1
在窗口的头文件中,您必须添加一个 CToolTipCtrl 实例和一个 TOOLINFO 成员,并添加消息映射以处理鼠标消息。
protected:
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnMouseLeave(WPARAM wPawam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
CToolTipCtrl m_toolTip;
TOOLINFO m_ti;
第二步
在窗口的实现文件中,在 Create() 的末尾添加以下内容以设置工具提示。
m_toolTip.Create(this); m_ti.cbSize = sizeof(m_ti); m_ti.uFlags = TTF_IDISHWND|TTF_TRACK|TTF_ABSOLUTE |TTF_TRANSPARENT ; m_ti.hwnd = m_hWnd; m_ti.hinst = NULL; m_ti.uId = (UINT)m_hWnd; m_ti.lpszText = LPSTR_TEXTCALLBACK; m_ti.rect.left = 0; m_ti.rect.top = 0; m_ti.rect.right = 0; m_ti.rect.bottom = 0; m_toolTip.SendMessage(TTM_ADDTOOL, 0, (LPARAM)&m_ti);
在消息映射的底部添加以下内容
ON_WM_MOUSEMOVE()
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
END_MESSAGE_MAP()
最后,添加消息映射中输入的消息处理程序方法
void CChildView::OnMouseMove(UINT nFlags, CPoint point)
{
CDemoItem* pItem = GetItemAtPt(point);
if(pItem == NULL)
{
m_toolTip.SendMessage(TTM_TRACKACTIVATE, FALSE, (LPARAM)&m_ti);
return;
}
RECT rect;
GetItemRect(pItem, &rect);
POINT pt;
TRACKMOUSEEVENT tk;
tk.cbSize = sizeof(tk);
tk.dwFlags = TME_LEAVE;
tk.dwHoverTime = 0;
tk.hwndTrack = m_hWnd;
_TrackMouseEvent(&tk);
pt.x = rect.left - 3;
pt.y = rect.top - 2;
ClientToScreen(&pt);
m_toolTip.SendMessage(TTM_TRACKPOSITION, 0, (LPARAM)MAKELPARAM(pt.x, pt.y));
m_toolTip.SendMessage(TTM_TRACKACTIVATE, TRUE, (LPARAM)&m_ti);
}
void CChildView::OnMouseLeave(WPARAM wPawam, LPARAM lParam)
{
m_toolTip.SendMessage(TTM_TRACKACTIVATE, FALSE, (LPARAM)&m_ti);
}
联系作者
Auto Debug 软件是一个 API 监视工具,可以自动跟踪所有 API 和 ActiveX 接口的输入和输出参数。 轻松设置要监视的 API,此应用程序将自动跟踪目标程序并监视函数调用的输入和输出。 监视任何 DLL 和 ActiveX 接口,自动分析 PDB 文件。
历史
2007-3-23:添加 WTL 版本源代码文件