关于捕获WM_MOUSELEAVE/WM_NCMOUSELEAVE消息和TrackMouseEvent 的使用

在网上看了很多片文章都说要捕获WM_MOUSELEAVE/WM_NCMOUSELEAVE消息,则需要先使用TrackMouseEvent,并且每一次TrackMouseEvent调用只能产生一次的WM_MOUSELEAVE/WM_NCMOUSELEAVE消息,以后需要再次调用TrackMouseEvent才能继续捕获WM_MOUSELEAVE/WM_NCMOUSELEAVE消息.

于是产生了很多代码 在WM_MOUSELEAVE里面再次调用TrackMouseEvent的代码,但是我自己认为应该在WM_CREATE里面进行首次调用,可是自己在测试的时候却发现程序陷入课死循环,于是取消在WM_CREATE里面的函数调用,这下好了,根本就没反应了.

于是苦苦冥思,不得其解.打开浏览器各种Google 最后在不宜咖啡处发现原来是要在WM_MOUSEMOVE(MFC则是在OnMouseMove)处调用TrackMouseEvent,并非其他文章的WM_MOUSELEAVE/WM_NCMOUSELEAVE处.

或许是我的哪一步做错了.请各位知情人士点拨下.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
	static TRACKMOUSEEVENT tme;

	switch(iMessage)
	{
	case WM_CREATE:
		tme.cbSize = sizeof(TRACKMOUSEEVENT);
		tme.dwFlags = TME_LEAVE;
		tme.dwHoverTime = HOVER_DEFAULT;
		tme.hwndTrack = hWnd;
        TrackMouseEvent(&tme);
		break;

    case WM_MOUSEMOVE:
		TrackMouseEvent(&tme);
		break;

    case WM_MOUSELEAVE:
		//TO-DO List
		//..........
        break;

	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
		
	default:
		return(DefWindowProc(hWnd,iMessage,wParam,lParam));
	}
	return 0;
}

转载于:https://www.cnblogs.com/hailoong/archive/2010/10/30/1865293.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值