VC++ 类CMFECToolTip类实现窗口的浮动提示效果

参考文章:http://www.codefans.net/articles/1863.shtml

源码下载:http://pan.baidu.com/s/1sjt0jEH

VC++制作浮动的鼠标提示,当鼠标光标放在程序的某个控件上时,要想知道该控件的功能,最好的办法就是弹出一个提示框来显示这些信息。本例就是要介绍如何做浮动的鼠标提示。编译并运行本例程序,如下图所示。当鼠标光标放到某一个控件上时,就会显示如图的提示框,而且背景颜色可以在程序中设定。

VC++ 类CMFECToolTip类实现窗口的浮动提示效果

有一个类CMFECToolTip 可以实现浮动的鼠标提示功能。该类捕捉鼠标信息,如果当前鼠标光标位置有需要显示提示的控件,则在合适的位置显示提示窗口。使用该类很简单。先创建该类的一个对象,然后将需要显示提示条的控件的ID,要显示的文字和提示窗口的颜色等信息一一传递给它,最后只需在鼠标移动时显示它即可。程序代码为:
(1)通过AppWizard生成基于对话框的应用程序InfoTip。
(2)给对话框随便增加几个控件,本例增加的是静态文本框、编辑框、CComboBox控件和按钮,其ID分别为IDC_TEXT1、IDC_EDIT1、IDC_COMBO1、IDC_BUTTON1。
(3)给对话框增加CMFECToolTip类型的成员变量m_toolTip。
(4)将所有需要显示提示信息的控件信息告诉CMFECToolTip对象,在对话框的OnInitDialog()函数中完成。其代码如下:

m_toolTip.Create( this );
CStringArray straInfo;

straInfo.RemoveAll();
straInfo.Add( "Test Control" );
straInfo.Add( "Test Control2" );
m_toolTip.AddControlInfo( IDC_STATIC, straInfo, RGB(255,255,0) );

(5) 重载消息响应: 1.在DLG文件中重载消息

//{{AFX_VIRTUAL(CInfoTipDlg)
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
//}}AFX_VIRTUAL

  2. 添加然后在对话框的PreTranslateMessage( MSG *pMsg )函数中捕捉WM_MOUSEMOVE消息,其代码如下:

BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
    if( pMsg->message == WM_MOUSEMOVE )
    {
        POINT pt = pMsg->pt;   
        ScreenToClient( &pt );
        m_toolTip.ShowToolTip( (CPoint)pt );
    }
    return CDialog::PreTranslateMessage(pMsg);
}