MFC 华而不实的鼠标响应事件

        前几天搞了注入DLL代码的问题,今天偶然想到如何实现控件响应鼠标事件,如何鼠标移动到某控件上静态编辑框或者鼠标显示提示信息,经过几番搜索,还好全部解决,就上回的代码

先在MainDialogWnd.cpp中声明一个对象用过存放鼠标提示信息

然后在初始化函数OnInitDialog()中设置m_stat,VS20XX的可以略过这段。也有人喜欢用老版本经典的VC6++,VC6的MFC新建的子对话框中通常没有用于初始化对话框的OnInitDialog()函数,我经过上回的学习,也发现我的VC6++代码中没有初始化函数OnInitDialog(),这也是要自己在类向导中添加,于是找遍类向导的信息,竟然没有发现OnInitDialog()这个函数,

手动添加……,我还是再找找相关资料,竟然被我找到了https://jingyan.baidu.com/article/1974b289a697daf4b1f77495.html,函数名为WM_INITDIALOG,而非OnInitDialog,害得我好找啊,于是这样:

在初始化OnInitDIalog里添加如下代码:

BOOL CMainDialogWnd::OnInitDialog() 
{
	CDialog::OnInitDialog();
	//按钮等鼠标悬浮提示初始化
	m_stat.Create(this);  
	m_stat.AddTool( GetDlgItem(IDC_BUTTON1), "固件无法升级时使用,详见说明书" ); //IDC_BUTTON为你要添加提示信息的按钮的ID
	m_stat.AddTool( GetDlgItem(IDC_BUTTON2), "小心点击,可能会格式化" ); //IDC_BUTTON为你要添加提示信息的按钮的ID
	//m_stat.AddTool( GetDlgItem(IDC_CHECK_CANRX_EN), "警告:在进行Bootloader下载时请不要打开【CAN接收】的开关!!!" );
	//m_stat.AddTool( GetDlgItem(IDC_STATIC_Version), "作者邮箱:wangpeijin0326@126.com" );
	m_stat.SetDelayTime(0); //设置延迟,如果为0则不等待,立即显示
	m_stat.SetTipTextColor( RGB(0,0,255) ); //设置提示文本的颜色
	m_stat.SetTipBkColor( RGB(255,255,255)); //设置提示框的背景颜色
	//m_stat.SetMaxTipWidth(600);//设置文本框的最大宽度,注意里边的数值单位为像素,所以要通过不断测试来选定最理想的宽度。利用此句可显示多行
	m_stat.Activate(TRUE); //设置是否启用提示
	//按钮等鼠标悬浮提示初始化完毕
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

象这样子

在类向导里添加PreTranslateMessage消息函数,同样如下

添加如下代码

BOOL CMainDialogWnd::PreTranslateMessage(MSG* pMsg) 
{
// TODO: Add your specialized code here and/or call the base class
  m_stat.RelayEvent(pMsg); 
return CDialog::PreTranslateMessage(pMsg);
}

这是鼠标提示信息完成;如果要鼠标移到某控件,静态编辑框显示相应信息,仍然在上面的函数中添加如下代码

if(pMsg->hwnd == GetDlgItem(IDC_BUTTON1)->GetSafeHwnd() && pMsg->message == WM_MOUSEMOVE)
	{ 
		CString windowText;
		GetDlgItem(IDC_BUTTON1)->GetWindowText(windowText); //得到按钮文本
		GetDlgItem(IDC_STATIC1)->SetWindowText("这不是按扭"); //显示到静态文本框
	}else if(pMsg->hwnd == GetDlgItem(IDC_BUTTON2)->GetSafeHwnd() && pMsg->message == WM_MOUSEMOVE)
	{
		CString windowText;
		GetDlgItem(IDC_BUTTON2)->GetWindowText(windowText);
		GetDlgItem(IDC_STATIC1)->SetWindowText("这也不是按扭");
	}

象这样:

OK,完成,试下

然后鼠标放到BUtton1上

然后鼠标放到BUtton2上

打完收工

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值