社区
界面
帖子详情
鼠标从窗口上移到窗口外会产生什么消息?谢谢
hustzxq524
2003-08-06 01:50:59
我从CStatic派生了一个类CEditPicCtrl用来显示图片,当按住鼠标在上面移动的时候,会拖动图片,我分别响应了WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_LBUTTONUP三个消息然后进行处理,现在的问题是如果把鼠标按住然后移动到我的图片框外面,然后松开鼠标,这个时候不会触发WM_LBUTTONUP消息,所以当鼠标再移回来的时候,图片还是会移动,不知道我说清楚了没有,我想知道这个时候有什么别的消息产生吗?谢谢拉!
...全文
263
10
打赏
收藏
鼠标从窗口上移到窗口外会产生什么消息?谢谢
我从CStatic派生了一个类CEditPicCtrl用来显示图片,当按住鼠标在上面移动的时候,会拖动图片,我分别响应了WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_LBUTTONUP三个消息然后进行处理,现在的问题是如果把鼠标按住然后移动到我的图片框外面,然后松开鼠标,这个时候不会触发WM_LBUTTONUP消息,所以当鼠标再移回来的时候,图片还是会移动,不知道我说清楚了没有,我想知道这个时候有什么别的消息产生吗?谢谢拉!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kinogre
2003-08-09
打赏
举报
回复
在WM_MOUSEMOVE中调用 _TrackMouseEvent 来跟踪WM_MOUSE HOVER和WM_MOUSELEAVE消息.
这两个消息中的任何一个产生之后,相应的跟踪便失效了,如果想继续跟踪这两个消息,需要要重新调用跟踪函数.
lyt_hf
2003-08-06
打赏
举报
回复
使用_TrackMouseEvent函数可以使系统在鼠标离开窗口的时候发送一个WM_MOUSELEAVE的消息。
使用方法:
1、在头文件声明消息响应函数
afx_msg void OnMouseLeave();
2、在cpp文件定义消息响应函数
void CIMyWin::OnMouseLeave()
{
MessageBox("鼠标已离开");
m_bTrackLeave=FALSE;
}
3、添加消息映射
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
4、调用_TrackMouseEvent();捕获鼠标离开的事件
void CMyWin::OnMouseMove(UINT nFlags, CPoint point)
{
if (!m_bTrackLeave)
{// 鼠标第一次移入窗口时, 请求一个WM_MOUSELEAVE 消息
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE;
_TrackMouseEvent(&tme);
m_bTrackLeave = TRUE;
}
CWnd::OnMouseMove(nFlags, point);
}
idau7
2003-08-06
打赏
举报
回复
如果你希望鼠标左击后只能在当前窗口移动,就捕获鼠标
在WM_LBUTTONTDOWN中加入如下代码,即使得当鼠标点击下后鼠标只能在窗口的范围内移动
RECT Rect;
GetClientRect (&Rect);
ClientToScreen (&Rect);
::ClipCursor (&Rect);
在WM_LBUTTONUP中加入
::ClipCursor (NULL);
使得鼠标可以移出窗口范围。
lizexpert
2003-08-06
打赏
举报
回复
windows 不产生这种消息
用SetCapture ReleaseCapture
macadamia
2003-08-06
打赏
举报
回复
前段时间就遇到过这个问题,按下鼠标左键拖动控件时Up事件响应不正常。
和你稍微不同的前提是:除了上述三个事件外,还响应了WM_MOUSELEAVE的消息,然后在OnMouseMove的时候做了一下鼠标离开的事件跟踪(TrackMouseEvent());
处理的方法:增加一个关于鼠标左键按下的标志m_bLBtnDownFlag;
void OnLButtonDown(UINT flags,CPoint point)
{
if(bLBtnDownFlag==FALSE)
{
bLBtnDownFlag=TRUE;
SetCapture();
}
//
。。。
}
void OnMouseMove(UINT flags,CPoint point)
{
//
。。。
if(!m_bTrack)
{
m_bTrack = true;
FireViewChange();
TRACKMOUSEEVENT tm;
tm.cbSize = sizeof(tm);
tm.dwFlags = TME_LEAVE;
tm.hwndTrack = this->m_hWnd;
::TrackMouseEvent(&tm);
}
。。。
//在这里也可以对鼠标按下/弹起状态进行判断,做不同的处理
}
void OnLButtonUp(UINT flags,CPoint point)
{
if(bLBtnDownFlag)
{
bLBtnDownFlag=FALSE;
ReleaseCapture();
}
//
。。。
}
tigerfox
2003-08-06
打赏
举报
回复
就是
hdqqq
2003-08-06
打赏
举报
回复
SetCapture
然后再Release
清泉ys
2003-08-06
打赏
举报
回复
可以在WM_LBUTTONDOWN里SetCapture( );
这样就可以收到WM_LBUTTONUP
要记得WM_LBUTTONUP里ReleaseCapture();
无敌魔仙
2003-08-06
打赏
举报
回复
WM_MOUSELEAVE
无敌魔仙
2003-08-06
打赏
举报
回复
WM_MOUSELEAVE
【转】windows程序设计(14):
鼠标
消息
详解
关于
鼠标
的一些细节知识: 通常,我们发
消息
时,都是对一个特定的
窗口
,但是对于
鼠标
消息
却不然:只要
鼠标
跨越
窗口
或者在某
窗口
中按下
鼠标
按键,那么
窗口
消息
处理程序就会收到
鼠标
消息
,而不管该
窗口
是否活动或者是否拥有输入焦点。
鼠标
消息
一个有21种:10个显示区域
消息
,11个非显示区域
消息
显示区域
鼠标
消息
当
鼠标
移过
窗口
的显示区域时,
窗口
消息
处理程序收到WM_MOUSEMOVE
消息
。 当在
窗口
的显示区域中按下或者释放一个
鼠标
按键时,
窗口
消息
处理程序会接收到下面这些
消息
: 键 .
MFC
鼠标
移入、移出
窗口
转自:vigoss331 首先,WM_MOUSELEAVE是
鼠标
离开
窗口
时发出的
消息
,但是这个
消息
与普通
消息
不同,要收到WM_MOUSELEAVE
消息
必须先调用 TrackMouseEvent 函数,并且每调用一次TrackMouseEvent
窗口
只能收到一次WM_MOUSELEAVE,也就是说如果要获得WM_MOUSELEAVE
消息
的话,当
鼠标
重新进入
窗口
时必须调用一次TrackMouseEvent。 函数原型: BOOL TrackMouseEvent(LPTRACKMOUSEEVENT lpEven
怀念:如何判断
鼠标
离开
窗口
/浮动在
窗口
上?
最近怀旧翻阅02年写的代码时,发现我有个程序在判断
鼠标
是否离开
窗口
时,用的是一个定时器每隔一段时间用GetCursorPos获取
鼠标
位置,再用GetWindowRect获取
窗口
位置然后再PtInRect判断
鼠标
是否在
窗口
内,不在,则执行XXXX代码,在则执行YYYY代码。 其实,当时我知道有一个
消息
叫WM_MOUSELEAVE,但是发现
鼠标
离开时怎么也收不到这个
消息
,也没有人知道
在屏幕外的
窗口
,
鼠标
移动到屏幕边缘时自动把屏幕外部分拉回屏幕内怎么设置?
跟随好几年的ThinkPad,WIN7,只要
窗口
超出屏幕外,
鼠标
移到对应的屏幕边缘,
窗口
就自动的移动显示完全,很讨厌这个功能,一直没找到在哪里,这下终于找到解决方案了! 桌面空白右键 -> 屏幕分辨率 -> 高级设置 -> 屏幕显示 -> 自动滚屏 不知道这是WIN7特有的功能还是thinkpad装了什么驱动才有的功能。...
windows程序设计(14):
鼠标
消息
详解
关于
鼠标
的一些细节知识: 通常,我们发
消息
时,都是对一个特定的
窗口
,但是对于
鼠标
消息
却不然:只要
鼠标
跨越
窗口
或者在某
窗口
中按下
鼠标
按键,那么
窗口
消息
处理程序就会收到
鼠标
消息
,而不管该
窗口
是否活动或者是否拥有输入焦点。
鼠标
消息
一个有21种:10个显示区域
消息
,11个非显示区域
消息
显示区域
鼠标
消息
当
鼠标
移过
窗口
的显示区域时,
窗口
消息
处理程序收到WM_MOUSEMOVE
消息
。 当在
窗口
的显示
界面
15,978
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章