在网上看了很多片文章都说要捕获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;
}