让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )
16 个解决方案
#1
重写CButton类,添加处理WM_MOUSELEAVE、WM_MOUSEHOVER、WM_MOUSEMOVE消息
#2
SetFocus()
#3
对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRect::PtInRect()
或者WindowFromPoint()
#4
GetFocus
#5
晕,只看了标题,没看内容,那不叫焦点
WM_MOUSEMOVE 就可以,为啥不用?
WM_MOUSEMOVE 就可以,为啥不用?
#6
http://bbs.csdn.net/topics/390326597
#7
http://bbs.csdn.net/topics/390326597
#8
是不是想在对话框的mouseleave中判断当前鼠标是否在按钮上?
GetCursorPos,然后ChildWindowFromPoin,应该可以
GetCursorPos,然后ChildWindowFromPoin,应该可以
#9
ChildWindowFromPoint
#10
void CPageDemoView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CPoint ptCursor;
GetCursorPos( &ptCursor);
HWND hwnd = NULL;
hwnd =:: WindowFromPoint(point);
TRACE(_T("%p\n"), hwnd);
CScrollView::OnMouseMove(nFlags, point);
}
大牛 我在view中实验一下 为什么view里面没有控件 hwnd不== null!
#11
这个是正解。
#12
是这个意思!
CPoint ptCursor;
::GetCursorPos( &ptCursor);
HWND hwnd = NULL;
hwnd = ::WindowFromPoint( ptCursor);
if ( hwnd != NULL)
{
m_bLeave = TRUE;
return;
}
当移出的时候就在view中移动 hwnd不== null ;
#13
不要这个 大神 看看这个吧
http://bbs.csdn.net/topics/390326597
#14
大神看看这个http://bbs.csdn.net/topics/390326597
#15
在那帖已回,楼主自己看下。最简单的就是自己再判断次。
#16
void CTestDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_bMouseMove == FALSE)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.dwFlags = TME_LEAVE;
tme.hwndTrack = GetSafeHwnd();
_TrackMouseEvent(&tme);
m_bMouseMove = TRUE;
}
CDialog::OnMouseMove(nFlags, point);
}
void CTestDlg::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
POINT pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
if (ChildWindowFromPoint(pt) == NULL)
{
AfxMessageBox("MouseLeave");
}
m_bMouseMove = FALSE;
}
#1
重写CButton类,添加处理WM_MOUSELEAVE、WM_MOUSEHOVER、WM_MOUSEMOVE消息
#2
SetFocus()
#3
对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRect::PtInRect()
或者WindowFromPoint()
#4
GetFocus
#5
晕,只看了标题,没看内容,那不叫焦点
WM_MOUSEMOVE 就可以,为啥不用?
WM_MOUSEMOVE 就可以,为啥不用?
#6
http://bbs.csdn.net/topics/390326597
#7
http://bbs.csdn.net/topics/390326597
#8
是不是想在对话框的mouseleave中判断当前鼠标是否在按钮上?
GetCursorPos,然后ChildWindowFromPoin,应该可以
GetCursorPos,然后ChildWindowFromPoin,应该可以
#9
ChildWindowFromPoint
#10
void CPageDemoView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CPoint ptCursor;
GetCursorPos( &ptCursor);
HWND hwnd = NULL;
hwnd =:: WindowFromPoint(point);
TRACE(_T("%p\n"), hwnd);
CScrollView::OnMouseMove(nFlags, point);
}
大牛 我在view中实验一下 为什么view里面没有控件 hwnd不== null!
#11
这个是正解。
#12
是这个意思!
CPoint ptCursor;
::GetCursorPos( &ptCursor);
HWND hwnd = NULL;
hwnd = ::WindowFromPoint( ptCursor);
if ( hwnd != NULL)
{
m_bLeave = TRUE;
return;
}
当移出的时候就在view中移动 hwnd不== null ;
#13
不要这个 大神 看看这个吧
http://bbs.csdn.net/topics/390326597
#14
大神看看这个http://bbs.csdn.net/topics/390326597
#15
在那帖已回,楼主自己看下。最简单的就是自己再判断次。
#16
void CTestDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_bMouseMove == FALSE)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.dwFlags = TME_LEAVE;
tme.hwndTrack = GetSafeHwnd();
_TrackMouseEvent(&tme);
m_bMouseMove = TRUE;
}
CDialog::OnMouseMove(nFlags, point);
}
void CTestDlg::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
POINT pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
if (ChildWindowFromPoint(pt) == NULL)
{
AfxMessageBox("MouseLeave");
}
m_bMouseMove = FALSE;
}