给MFC对话框按钮控件添加提示

  • Post author:
  • Post category:其他




前言

本文利用MFC提供的CToolTipCtrl类,给对话框控件提供工具提示。



一、具体思路

创建和操作一个CToolTipCtrl 的具体思路为:

  1. 构造CToolTipCtrl 对象 .
  2. 调用Create方法创建一个Windows工具提示控件并将其附加给CToolTipCtrl 对象。
  3. 调用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. 器具是指窗口、子控件、客户区中定义的矩形区域等)注册一个工具提示控件,这样当鼠标悬停于器具时,工具提示控件存储的信息将被显示出来。
  4. 激活这个CToolTipCtrl控件。
  5. 除此以外,还可以对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 版权协议,转载请附上原文出处链接和本声明。