我现在想实现这样一个功能:
开始有一个对话框,然后当鼠标移动到上面时创建另外一个对话框,当鼠标移开后面创建的这个对话框时候,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; 这里鼠标跟踪的就是对话框的句柄,那么问题是:
如何解决只有当鼠标离开这个框时,才删除对话框,而鼠标移动到某个控件上时候,不删除对话框呢?
兄弟们帮帮忙,不甚感激!
开始有一个对话框,然后当鼠标移动到上面时创建另外一个对话框,当鼠标移开后面创建的这个对话框时候,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; 这里鼠标跟踪的就是对话框的句柄,那么问题是:
如何解决只有当鼠标离开这个框时,才删除对话框,而鼠标移动到某个控件上时候,不删除对话框呢?
兄弟们帮帮忙,不甚感激!
GetClientRect(&rectClient);
CPoint ptCursor;
::GetCursorPos(&ptCursor); if(!::PtInRect(&rectClient,ptCursor))
{
this->DestroyWindow();
}
我在OnMouseLeave中加了上面代码,问题还是没有解决
ScreenToClient转换一下rect。
仍然不行