分享

WM_MOUSELEAVE WM_MOUSEHOVER 消息的捕捉

 semo_zhang 2013-01-07
在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);

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多