VC事件消息

我要捕捉一个鼠标进入窗体时产生的事件消息,一个鼠标离开窗体时产生的事件消息,不用WM_MOUSEMOVE,不知道VC又没提供这样的消息?我记得JAVA是有的。... 我要捕捉一个鼠标进入窗体时产生的事件消息,一个鼠标离开窗体时产生的事件消息,不用WM_MOUSEMOVE,不知道VC又没提供这样的消息?我记得JAVA是有的。 展开
 我来答
魔高丈
2008-12-29 · TA获得超过9506个赞
知道大有可为答主
回答量:2066
采纳率:0%
帮助的人:3470万
展开全部
使用WM_MOUSEENTER 和 WM_MOUSELEAVE;

WM_MOUSELEAVE ,WM_MOUSEENTER 应该算是个自定义的消息,因为Windows通常都不会发送这个消息。只有你调用TrackMouseEvent 才会收到这个消息。

实际上这个消息 是 TrackMouseEvent 而不是windows 发出的。很奇怪微软会定义出这样子的API。而且TrackMouseEvent 个人感觉也不大好用(主要是感觉别扭,不是说功能不行)。其实TrackMouseEvent 的原理也蛮简单的,自己三两句语句就搞定了,不必理会微软搞的这个古里古怪的API,还得去查找消息定义。

原理如下:
鼠标在窗口区域时会收到MouseMove消息,第一次收到这个消息时 就是 WM_MOUSEENTER。
On_MouseMove(...)
{
static BOOL bFirst = TRUE;
if (bFirst)
{
// PostMessage(WM_MOUSEENTER...) or call some function.
bFirst = FALSE;
SetTimer(...);
}
}

在 Mouse Enter 自后启动了一个计时器, 通常100ms 就足够了。计时器里检测鼠标是否离开。
On_Timer(...)
{
...
GetCursorPos(pt);
GetWindowRect(rect);
if (PtInRect(&rect,pt))
{
KillTimer(...); // kill self.
PostMessage(WM_MOUSELEAVE...); // or call some function.
}
}
magic_knife
2008-12-29 · TA获得超过848个赞
知道小有建树答主
回答量:2882
采纳率:0%
帮助的人:984万
展开全部
WM_MOUSELEAVE
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式