如何判断一个对话框中的button是否获得焦点

时间:2021-08-10 05:48:07
当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )

16 个解决方案

#1


重写CButton类,添加处理WM_MOUSELEAVE、WM_MOUSEHOVER、WM_MOUSEMOVE消息

#2


SetFocus()

#3


引用 楼主 sha_jinhao 的回复:
当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )

对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRect::PtInRect()
或者WindowFromPoint()

#4


GetFocus

#5


晕,只看了标题,没看内容,那不叫焦点
WM_MOUSEMOVE 就可以,为啥不用?

#6


引用 5 楼 gfm688 的回复:
晕,只看了标题,没看内容,那不叫焦点
WM_MOUSEMOVE 就可以,为啥不用?
http://bbs.csdn.net/topics/390326597

#7


引用 3 楼 VisualEleven 的回复:
引用 楼主 sha_jinhao 的回复:当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )
对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRe……

http://bbs.csdn.net/topics/390326597

#8


是不是想在对话框的mouseleave中判断当前鼠标是否在按钮上?

GetCursorPos,然后ChildWindowFromPoin,应该可以

#9


ChildWindowFromPoint
如何判断一个对话框中的button是否获得焦点

#10


引用 3 楼 VisualEleven 的回复:
引用 楼主 sha_jinhao 的回复:当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )
对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRe……

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


引用 3 楼 VisualEleven 的回复:
引用 楼主 sha_jinhao 的回复:当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )
对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRe……


这个是正解。

#12


引用 8 楼 gfm688 的回复:
是不是想在对话框的mouseleave中判断当前鼠标是否在按钮上?

GetCursorPos,然后ChildWindowFromPoin,应该可以

是这个意思!

CPoint ptCursor;
::GetCursorPos( &ptCursor); 

HWND hwnd = NULL;
hwnd = ::WindowFromPoint( ptCursor);
if ( hwnd != NULL)
{
m_bLeave = TRUE;
return;
}

当移出的时候就在view中移动 hwnd不== null ; 

#13


引用 11 楼 tiger9991 的回复:
引用 3 楼 VisualEleven 的回复:引用 楼主 sha_jinhao 的回复:当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )
对话框类的PreTranslateMessage类过滤WM_MOUSEMOV……

不要这个  大神 看看这个吧
http://bbs.csdn.net/topics/390326597

#14


引用 3 楼 VisualEleven 的回复:
引用 楼主 sha_jinhao 的回复:当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )
对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRe……
大神看看这个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


引用 楼主 sha_jinhao 的回复:
当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )

对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRect::PtInRect()
或者WindowFromPoint()

#4


GetFocus

#5


晕,只看了标题,没看内容,那不叫焦点
WM_MOUSEMOVE 就可以,为啥不用?

#6


引用 5 楼 gfm688 的回复:
晕,只看了标题,没看内容,那不叫焦点
WM_MOUSEMOVE 就可以,为啥不用?
http://bbs.csdn.net/topics/390326597

#7


引用 3 楼 VisualEleven 的回复:
引用 楼主 sha_jinhao 的回复:当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )
对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRe……

http://bbs.csdn.net/topics/390326597

#8


是不是想在对话框的mouseleave中判断当前鼠标是否在按钮上?

GetCursorPos,然后ChildWindowFromPoin,应该可以

#9


ChildWindowFromPoint
如何判断一个对话框中的button是否获得焦点

#10


引用 3 楼 VisualEleven 的回复:
引用 楼主 sha_jinhao 的回复:当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )
对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRe……

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


引用 3 楼 VisualEleven 的回复:
引用 楼主 sha_jinhao 的回复:当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )
对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRe……


这个是正解。

#12


引用 8 楼 gfm688 的回复:
是不是想在对话框的mouseleave中判断当前鼠标是否在按钮上?

GetCursorPos,然后ChildWindowFromPoin,应该可以

是这个意思!

CPoint ptCursor;
::GetCursorPos( &ptCursor); 

HWND hwnd = NULL;
hwnd = ::WindowFromPoint( ptCursor);
if ( hwnd != NULL)
{
m_bLeave = TRUE;
return;
}

当移出的时候就在view中移动 hwnd不== null ; 

#13


引用 11 楼 tiger9991 的回复:
引用 3 楼 VisualEleven 的回复:引用 楼主 sha_jinhao 的回复:当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )
对话框类的PreTranslateMessage类过滤WM_MOUSEMOV……

不要这个  大神 看看这个吧
http://bbs.csdn.net/topics/390326597

#14


引用 3 楼 VisualEleven 的回复:
引用 楼主 sha_jinhao 的回复:当我把鼠标移到对话框上的button按钮时,我想知道是否移到上面, 不准使用button的onmousemove!

让对话框不响应onmouseleave消息(只是在移到对话框上的控件时候不响应 )
对话框类的PreTranslateMessage类过滤WM_MOUSEMOVE消息,判断当前鼠标的位置是否在按钮控件上CRe……
大神看看这个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;
}