在MFC中有时候会出现捕捉WM_MOUSELEASE和WM_MOUSEHOVER失败!
void CListBoxEx::OnMouseHover(UINT nFlags, CPoint point)
{ // TODO: 在此添加消息处理程序代码和/或调用默认值 //::MessageBox(NULL,"fjdkjf","Prompt",MB_OK); CListBox::OnMouseHover(nFlags, point);
} void CListBoxEx::OnMouseLeave() { // TODO: 在此添加消息处理程序代码和/或调用默认值 //::MessageBox(NULL,"OnMouseLeave","Prompt",MB_OK); CListBox::OnMouseLeave();
} 上面两个函数无法响应鼠标进入或者离开窗口事件。(不知道为什么会出现这样的情况?)
测试找出下面的方法:
把下面代码加进对话框的WM_MOUSEMOVE的消息响应中
TRACKMOUSEEVENT tme;
tme.cbSize=sizeof(TRACKMOUSEEVENT); tme.dwFlags=TME_HOVER | TME_LEAVE; tme.dwHoverTime=HOVER_DEFAULT; tme.hwndTrack=m_hWnd; if(!_TrackMouseEvent(&tme)) AfxMessageBox("鼠标事件捕捉失败!"); 2 然后你直接可以用下面代码在PreTranslateMessage函数中接收,不需要自己写WM_MOUSELEASE和WM_MOUSEHOVER消息的响应函数(当然你要自己写也行): if(pMsg->message==WM_MOUSELEAVE) AfxMessageBox("mouse leave"); return CDialog::PreTranslateMessage(pMsg); |
|
来自: semo_zhang > 《vc 》