怎么判断鼠标是否在窗口下
如何判断鼠标是否在窗口上
BOOL m_bMouseTracking; //设置一个状态量用于记录和标识鼠标是否在窗口内
//处理鼠标移动消息
void CXXXDlg::OnMouseMove(UINT nFlags,CPoint point)
{
//接收到WM_MOUSEMOVE,而m_bMouseTracking为假时,鼠标进入窗口。
TRACKMOUSEEVENT tme; //设置_TrackMouseEvent
tme.cbSize=sizeof(TRACKMOUSEEVENT); //监控鼠标离开
tme.dwFlags=TME_LEAVE;
tme.hwndTrack=this->m_hWnd;
if(::_TrackMouseEvent(&tme))
{
m_bMouseTracking=TRUE; //其他鼠标进入时的操作
}
CDialog::OnMouseMove(nFlags, point);
}
...
以上代码 当鼠标在窗口上的控件(例如编辑框)时 也判断为mouseout状态 不知道怎么解决
------解决方案--------------------
GetCursorPos 判断坐标
------解决方案--------------------
PtInRect
------解决方案--------------------
void CAboutDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CPoint pt;
GetCursorPos(&pt);
CRect rc;
GetWindowRect(&rc);
if(rc.PtInRect(pt))
{
afxDump << "in\n";
}
else
{
afxDump << "out\n";
}
//
CDialog::OnTimer(nIDEvent);
}
// in OnInitDialog():
SetTimer(1,200,0);
BOOL m_bMouseTracking; //设置一个状态量用于记录和标识鼠标是否在窗口内
//处理鼠标移动消息
void CXXXDlg::OnMouseMove(UINT nFlags,CPoint point)
{
//接收到WM_MOUSEMOVE,而m_bMouseTracking为假时,鼠标进入窗口。
TRACKMOUSEEVENT tme; //设置_TrackMouseEvent
tme.cbSize=sizeof(TRACKMOUSEEVENT); //监控鼠标离开
tme.dwFlags=TME_LEAVE;
tme.hwndTrack=this->m_hWnd;
if(::_TrackMouseEvent(&tme))
{
m_bMouseTracking=TRUE; //其他鼠标进入时的操作
}
CDialog::OnMouseMove(nFlags, point);
}
...
以上代码 当鼠标在窗口上的控件(例如编辑框)时 也判断为mouseout状态 不知道怎么解决
------解决方案--------------------
GetCursorPos 判断坐标
------解决方案--------------------
PtInRect
------解决方案--------------------
void CAboutDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CPoint pt;
GetCursorPos(&pt);
CRect rc;
GetWindowRect(&rc);
if(rc.PtInRect(pt))
{
afxDump << "in\n";
}
else
{
afxDump << "out\n";
}
//
CDialog::OnTimer(nIDEvent);
}
// in OnInitDialog():
SetTimer(1,200,0);