关于WM_MOUSELEAVE的一个有关问题
关于WM_MOUSELEAVE的一个问题
我现在想实现这样一个功能:
开始有一个对话框,然后当鼠标移动到上面时创建另外一个对话框,当鼠标移开后面创建的这个对话框时候,destroy它,现在基本可以实现,方法如下:
响应:
void CMaxDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
TRACKMOUSEEVENT tme;
tme.cbSize=sizeof(TRACKMOUSEEVENT);
tme.dwFlags=/*TME_HOVER | */TME_LEAVE;
tme.dwHoverTime=HOVER_DEFAULT;
tme.hwndTrack=m_hWnd;
if(!_TrackMouseEvent(&tme))
AfxMessageBox( "Êó±êʼþ²¶×½Ê§°Ü£¡ ");
CDialog::OnMouseMove(nFlags, point);
}
LRESULT CMaxDlg::OnMouseLeave(WPARAM wParam,LPARAM lParam)
{
this-> DestroyWindow();
return 0;
}
OnMouseLeave是我自定义的一个消息
afx_msg LRESULT OnMouseLeave(WPARAM ,LPARAM);
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
但是如果对话框上有一个按钮的时候,当我们把鼠标移动到上面时,他也删除这个对话框,原因是 tme.hwndTrack=m_hWnd; 这里鼠标跟踪的就是对话框的句柄,那么问题是:
如何解决只有当鼠标离开这个框时,才删除对话框,而鼠标移动到某个控件上时候,不删除对话框呢?
兄弟们帮帮忙,不甚感激!
------解决方案--------------------
可以在CMaxDlg::OnMouseLeave中得到鼠标和对话框的位置,来判断鼠标是否在对话框之外
------解决方案--------------------
获取对话框的客户区大小,然后判断鼠标是不是在这个区域内(PtInRect函数就可以判断)。注意处理坐标转换。
我现在想实现这样一个功能:
开始有一个对话框,然后当鼠标移动到上面时创建另外一个对话框,当鼠标移开后面创建的这个对话框时候,destroy它,现在基本可以实现,方法如下:
响应:
void CMaxDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
TRACKMOUSEEVENT tme;
tme.cbSize=sizeof(TRACKMOUSEEVENT);
tme.dwFlags=/*TME_HOVER | */TME_LEAVE;
tme.dwHoverTime=HOVER_DEFAULT;
tme.hwndTrack=m_hWnd;
if(!_TrackMouseEvent(&tme))
AfxMessageBox( "Êó±êʼþ²¶×½Ê§°Ü£¡ ");
CDialog::OnMouseMove(nFlags, point);
}
LRESULT CMaxDlg::OnMouseLeave(WPARAM wParam,LPARAM lParam)
{
this-> DestroyWindow();
return 0;
}
OnMouseLeave是我自定义的一个消息
afx_msg LRESULT OnMouseLeave(WPARAM ,LPARAM);
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
但是如果对话框上有一个按钮的时候,当我们把鼠标移动到上面时,他也删除这个对话框,原因是 tme.hwndTrack=m_hWnd; 这里鼠标跟踪的就是对话框的句柄,那么问题是:
如何解决只有当鼠标离开这个框时,才删除对话框,而鼠标移动到某个控件上时候,不删除对话框呢?
兄弟们帮帮忙,不甚感激!
------解决方案--------------------
可以在CMaxDlg::OnMouseLeave中得到鼠标和对话框的位置,来判断鼠标是否在对话框之外
------解决方案--------------------
获取对话框的客户区大小,然后判断鼠标是不是在这个区域内(PtInRect函数就可以判断)。注意处理坐标转换。