如何捕捉鼠标消息?

cvip11 2003-05-18 06:08:24
在不同窗口之间移动的状态,特别是在窗口交接处
...全文
38 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
papaya_stone 2003-05-18
  • 打赏
  • 举报
回复
WindowFromPoint();
allenhai1980 2003-05-18
  • 打赏
  • 举报
回复
还不是很明白楼主的意思。楼上的意思倒是好理解。
stoneyrh 2003-05-18
  • 打赏
  • 举报
回复
看了 HJHJ001(阿景) 的回答我才有点明白问的是什么。这的确是一个好方法。
还有一个就是使用_TrackMouseEvent也可以使窗口产生WM_MOUSELEAVE的消息
HJHJ001 2003-05-18
  • 打赏
  • 举报
回复
这个问题还用不到HOOK,只需要在映射WM_MOUSEMOVE,在鼠标进入时设置setcapture()
鼠标离开时恢复。在mousemove中比较鼠标的point是否在窗体边界内。下面时我的一段程序:
void CMyStaticClass::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

CRect rectCtrl;
GetClientRect(rectCtrl);
if(rectCtrl.PtInRect(point))
{
if (m_nBkCount == 0) {
SetCapture();//目的是处理在边界鼠标移动过快时可能检测不到鼠标的移动,setcapture后不管鼠标鼠标是否在该窗体内都会向该窗体发送WM_MOUSEMOVE消息。但是要确保在检测到鼠标已经离开时要ReleaseCapture。
}
m_nBkCount = 1;
}
else{
ReleaseCapture();
m_nBkCount =0;
}
}
m_nBkCount 标志鼠标是否一直在该窗体内(当然也可以不要这个判断)。

写了这么多,也不知道大家能不能明白我在说什么。我的表达能力差了点。如果不明白,就算我没说过,如果明白那就最好了。
cvip11 2003-05-18
  • 打赏
  • 举报
回复
只要是非客户区的问题,但是wm_nclbuttoup好象不行。
zjp899 2003-05-18
  • 打赏
  • 举报
回复
hook
HKer_007 2003-05-18
  • 打赏
  • 举报
回复
如果是窗口以外,用鼠标HOOK
HKer_007 2003-05-18
  • 打赏
  • 举报
回复
WM_MOUSEMOVE

你可以计算边界值,然后和参数PIONT point.x point.y 比较。
cvip11 2003-05-18
  • 打赏
  • 举报
回复
不同窗口之间。
boulder 2003-05-18
  • 打赏
  • 举报
回复
什么意思?是在不同的窗口之间移动,还是在同一个窗口的不同的区域?你
是指拆分视图的不同窗口吗?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧