MFC重载鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息

1. 重载OnMouseMove()消息,在消息的实现中添加代码:

void CMainWindow::OnMouseMove(UINT nFlags, CPoint point)
{
	TRACKMOUSEEVENT tme;
	tme.cbSize = sizeof(tme);	//结构体缓冲区大小
	tme.dwFlags = TME_HOVER;	//注册WM_MOUSEHOVER消息
	tme.dwHoverTime = 1;		//WM_MOUSEHOVER消息触发间隔时间
	tme.hwndTrack = m_hWnd;		//当前窗口句柄

	::TrackMouseEvent(&tme);	//注册发送消息
}

2.在.h文件中添加OnMouseLeave和OnMouseHover的定义

afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam);

然后在

BEGIN_MESSAGE_MAP
END_MESSAGE_MAP()

之间添加对两个消息的声明:

BEGIN_MESSAGE_MAP(CControlButton, CButton)
	//{{AFX_MSG_MAP(CControlButton)
	ON_WM_MOUSEMOVE()
	ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
	ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
	ON_WM_ERASEBKGND()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

最后在cpp文件后面添加对两个消息的实现:

LRESULT CControlButton::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
	return 0;
}

LRESULT CControlButton::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
	return 0;
}
这样就可以使用 OnMouseHover 和OnMouseLeave消息了。

 

原理:
当鼠标停留在程序窗口一定时间后,会产生一个WM_MOUSEHOVER消息;当鼠标离开程序窗口后,会产生一个WM_MOUSELEAVE消息。

要使用这两个消息,首先需要用API函数::TrackMouseEvent来注册消息。(有说法表示要使用::TrackMouseEvent函数需要在源码中加入一个#define语句:

#define _WIN32_WINNT 0x0400 

但是不加往往也能用)

由于鼠标悬停消息是在WM_MOUSEMOVE消息中进行发送的,所以首先需要在WM_MOUSEMOVE消息中注册WM_MOUSEHOVER消息:

void CMainWindow::OnMouseMove(UINT nFlags, CPoint point)
{
	TRACKMOUSEEVENT tme;
	tme.cbSize = sizeof(tme);	//结构体缓冲区大小
	tme.dwFlags = TME_HOVER;	//注册WM_MOUSEHOVER消息
	tme.dwHoverTime = 1; //WM_MOUSEHOVER消息触发间隔时间
	tme.hwndTrack = m_hWnd; //当前窗口句柄

	::TrackMouseEvent(&tme); //注册发送消息
}
动添加WM_MOUSEHOVER和WM_MOUSELEAVE消息就可以使用了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值