MFC 给非控件添加ToolTip

界面上有一个CStatic控件,在这个控件上绘制了有文本,按钮等图形,共同构成了这个CStatic控件的背景,如图,"ON AIR"并不是一个真正的CButton按钮,而是一个假的按钮,现在要给这个按钮添加ToolTip.

       


思路如下,先给CStatic控件添加ToolTip,然后获取按钮的位置,通过鼠标是否在按钮上来判断是否显示tooltip.

步骤:

1. 在CStatic父窗体类中添加CToolTipCtrl类型的成员变量。

1
CToolTipCtrl m_pContentTip;

2.  重载虚函数BOOL PreTranslateMessage( MSG* pMsg );

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
BOOL CDlgNew::PreTranslateMessage( MSG* pMsg )
{
    if(pMsg->message== WM_LBUTTONDOWN || pMsg->message== WM_LBUTTONUP || pMsg->message== WM_MOUSEMOVE)
    {

          CRect airBtnRect = GetAirButtonRect(); // 自定义函数获取按钮位置。

        if(airBtnRect.PtInRect(pMsg->pt)) // 在这里判断鼠标是否在按钮中。
        {
            if (!m_pContentTip.IsWindowVisible()) // 判断tooltip是否已经显示,如果已经显示则不执行下面的显示操作,避免重复刷新。
            {
                m_pContentTip.Activate(TRUE);
                m_pContentTip.UpdateTipText(_T("Click to me."),GetDlgItem(IDC_STATIC_ALL)); //IDC_STATIC_ALL为CStatic控件ID。
                m_pContentTip.RelayEvent(pMsg);
            }
        }
        else
        {
            m_pContentTip.Activate(FALSE);
        }
    }
 
    return CDialog::PreTranslateMessage(pMsg);
}


     






posted @ 2013-11-29 15:40  Jeffery-J  阅读(366)  评论(0编辑  收藏  举报