65.9K
CodeProject 正在变化。 阅读更多。
Home

在自己的控件上创建即时工具提示

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.52/5 (8投票s)

2007年3月16日

viewsIcon

43475

downloadIcon

1562

在您的控件(如树形控件)上创建就地工具提示非常容易。

引言

在您的控件(如树形控件)上创建就地工具提示非常容易。

Screenshot - tooltipsdemo.jpg

使用代码

步骤 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 文件。

http://www.autodebug.com

历史

2007-3-23:添加 WTL 版本源代码文件

© . All rights reserved.