前言
本文利用MFC提供的CToolTipCtrl类,给对话框控件提供工具提示。
一、具体思路
创建和操作一个CToolTipCtrl 的具体思路为:
- 构造CToolTipCtrl 对象 .
- 调用Create方法创建一个Windows工具提示控件并将其附加给CToolTipCtrl 对象。
- 调用AddTool方法给一个器具(A “tool” is either a window, such as a child window or control, or an application-defined rectangular area within a window’s client area. 器具是指窗口、子控件、客户区中定义的矩形区域等)注册一个工具提示控件,这样当鼠标悬停于器具时,工具提示控件存储的信息将被显示出来。
- 激活这个CToolTipCtrl控件。
- 除此以外,还可以对CToolTipCtrl 的各项参数进行具体设置,详见下面示例。
二、代码示例
创建一个基于对话框的MFC程序,在对话框中添加两个按钮控件。修改其ID值分别为IDC_BTN_TIPS、IDC_BTN_TIPS2。
1.在头文件中添加CToolTipCtrl对象:
private:
CToolTipCtrl m_wndTipContrl;
2.在OnInitDialog添加以下代码:
BOOL CAddTipsDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_wndTipContrl.Create(this);
m_wndTipContrl.AddTool(GetDlgItem(IDC_BTN_TIPS), _T("提示信息1:试验"));
m_wndTipContrl.AddTool(GetDlgItem(IDC_BTN_TIPS2), _T("提示信息2:试验"));
m_wndTipContrl.SetDelayTime(200); //鼠标放上去多少ms开始显示提示
m_wndTipContrl.SetTipTextColor(RGB(0, 0, 0));//设置提示字体颜色
m_wndTipContrl.SetTipBkColor(RGB(255, 255, 255));//设置提示背景颜色
m_wndTipContrl.SetDelayTime(TTDT_AUTOPOP,6000); //add on 20221101,设置tip显示时间
m_wndTipContrl.Activate(TRUE); //一定要激活
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
3.重载对话框的PreTranslateMessage函数,根据MSDN中的叙述,为了使工具提示控件得到重要消息(例如WM_LBUTTONXXX)的通知,程序必须将消息转发给工具提示控件。转发消息最好的方式是在PreTranslateMessage函数中调用CToolTipCtrl::RelayEvent。
(In order for the tool tip control to be notified of important messages, such as WM_LBUTTONXXX messages, you must relay the messages to your tool tip control. The best method for this relay is to make a call to CToolTipCtrl::RelayEvent, in the PreTranslateMessage function of the owner window. )
PreTranslateMessage函数的实现如下:
BOOL CAddTipsDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (pMsg->message == WM_LBUTTONDOWN ||
pMsg->message == WM_LBUTTONUP ||
pMsg->message == WM_MOUSEMOVE)
{
m_wndTipContrl.RelayEvent(pMsg);
}
return CDialogEx::PreTranslateMessage(pMsg);
}
三、效果
版权声明:本文为mary288267原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。