本文主要是介绍WM_MOUSEHOVER 和 WM_MOUSELEAVE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.建立MFC程序
2.添加按钮,IDC_BUTTON1
3.添加类,直接右键控件时无法添加CButton的派生类的,如果想添加的话,只能选中项目根,右键添加类,MFC类-->MFC类向导-->选择继承CButton。
4.添加变量,选中按钮,,右键添加变量,mbt1,类型为CBtn//没有这个变量是不行的,我试了n次都没有成功,缺少这个没有反应
5.打开类向导,在类CBtn下添加消息OnMouseHover、OnMouseMove和OnMouseLeave
6.在btn.h中public下添加bool m_bTracking;
在btn.cpp中在类的构造函数中添加m_bTracking=0;//初始化,添加的消息对应如下,实现的功能是当光标在按钮上悬停1后打开网页:
void CBtn::OnMouseHover(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
ShellExecute(0, NULL, _T(""), NULL, NULL, SW_NORMAL);
m_bTracking = false;
CButton::OnMouseHover(nFlags, point);
}
void CBtn::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (!m_bTracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags =TME_HOVER;//要触发的消息
tme.hwndTrack = this->m_hWnd;
tme.dwHoverTime = 1000;// 若不设此参数,则无法触发mouseHover
if (::_TrackMouseEvent(&tme)) //MOUSELEAVE|MOUSEHOVER消息由此函数触发
{
//::_TrackMouseEvent(&tme);
m_bTracking = true;
}
}
CButton::OnMouseMove(nFlags, point);
}
void CBtn::OnMouseLeave()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_bTracking = false;
CButton::OnMouseLeave();
}
也可以参考:OnMouseHover()和OnMouseLeave()(让窗口捕获并响应WM_MOUSEHOVER和WM_MOUSELEAVE消息)
这篇关于WM_MOUSEHOVER 和 WM_MOUSELEAVE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!