VC-关于判断鼠标是否在指定窗口中的问题

VC-关于判断鼠标是否在指定窗口中的问题

浮生未歇 发布于 2017-05-12 字数 267 浏览 1290 回复 2

我知道利用TrackMouseEvent和OnMouseLeave可以判断鼠标是否已经离开一个窗口。但是,由于我的窗口存在滚动条,当鼠标进入滚动条区域时,MouseLeave消息就会产生,这是我不期望的。我所希望的是只有在鼠标离开整个窗口区域时,然后产生某个消息或响应某个事件,这样我就好操作了。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泛泛之交 2017-10-02 2 楼

SetCapture可以解决你上述问题

原理描述:
在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。

捕获的事件:onmousedown、onmouseup、onmousemove、onclick、ondblclick、onmouseover和onmouseout。

当然,也需要你ReleaseCapture释放控制权,否则会造成资源占用升高

清晨说ぺ晚安 2017-05-19 1 楼

使用的函数:WindowFromPoint()SetCapture()ReleaseCapture()

void Cxxx::OnMouseMove(UINT nFlags, CPoint point)
{
CButton::OnMouseMove(nFlags, point);
m_bOver=true;
SetCapture();
//将鼠标捕获设置到指定的窗口。在鼠标按钮按下的时候,
//这个窗口会为当前应用程序或整个系统接收所有鼠标输入
POINT p2 = point;
ClientToScreen(&p2);
CWnd* wfp = WindowFromPoint(p2);//从鼠标位置获取窗口句柄
if (wfp && wfp->m_hWnd != this->m_hWnd)
{
m_bOver= FALSE;
ReleaseCapture();//为当前的应用程序释放鼠标捕获
}
Invalidate();
}

来自:http://www.cppblog.com/nenlong/archive/2007/03/14/19825.html