中易网

如何使用mousemove消息

答案:3  悬赏:40  
解决时间 2021-04-08 15:36
基于对话框的工程,有几个static text控件,要求鼠标进入和离开的时候
改变控件的颜色。我才学几个礼拜,好多都是搜到一点点资料,就是实现不了。
我是在对话框的wm_mousemove消息响应中进行操作的。结果遇到以下问题:比如我的某个static控件的位置是{top=102 bottom=132 left=14 right=203}
鼠标在static控件里面移动的时候是不会发wm_mousemove消息的。当鼠标从对话框中移动到接近static控件,left=13的时候point还不在static控件上,
此时再移动一个像素left=14的时候(此时鼠标在空间上)已经不产生mousemove消息了!所以ptInRect函数总无法判断到point进入控件的时机。怎么办?

To stone_dongdong: 我之前用的就是继承CStatic类 ,当时遇到的问题是当鼠标进入某个static控件时onmousemove消息中的point的值是在该控件中的坐标值,我无法通过ptInRect来判断鼠标进入了哪个static控件(因为我需要知道鼠标进入了哪个static控件)。所以才放弃了继承cstatic类。至于第二点,
我暂时还不太清楚具体怎么操作。
最佳答案
有2个问题要给你说明:
1。所有子控件都有自己的消息处理,当鼠标移动到子控件上方的时候,鼠标消息是在子控件的窗口消息处理函数里面处理的。
2。一般控件都有反射消息,就是子控件里面消息拦截以后在反射给父窗口——也就是对话框来处理。

所以,要实现你的移动改变颜色,有2种方法。
1。继承 cstatic类,在其消息处理历程里面对wm_mousemove做拦截判断处理
2。重载线程的消息预处理函数pretranslatemessage,拦截mousemove消息,来执行判断。

续:
得到的pt,当然是相当于static的。可以使用 ClientToScreen得到当前坐标在屏幕坐标系的位置,再通过ScreenToClient(hwnd,xx)得到当前坐标在某窗口(对话框,hwnd就是对话框的窗口句柄)的客户区坐标。
这样再判断就行了。
第二个方法...,就用这个方法吧,具体函数的使用,多看MSDN
全部回答
这个我也一时想不到好的办法。我的话会在调用DispatchMessage之前拦截WM_MOUSEMOVE消息。因为在控件上的话,WM_MOUSEMOVE消息是直接发给控件的,主窗口自然接受不到。但是一切消息都要通过建立窗口的线程,所以还是可以拦截的。
自己建立一个按钮类,比如cmybutton,继承于mfc的button类。 用向导添加cmybutton的onmousemove(...)函数。 在mfc设置向导里为按钮关联cmybutton类。 用向导添加对话框的onmousemove(...)函数。 当鼠标放到按钮上的时候触发按钮类的onmousemove函数,这时用setwindowtext设置按钮的文本。 当鼠标移开按钮的时候触发对话框类的onmousemove函数,这时用setdlgitemtext设置按钮的文本。 明白了不?? 留下你的邮箱,我把工程文件发给你
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
人死后会不会到第五维空间。
去国美面试主任助理后试用期上了两天班就辞职
古剑我用纪念卡买了一个海底风情包 怎么领取
一首歌歌词棒棒棒adl
“我与周边环境”调查报告
小弟刚大学毕业,想干房产中介,不知道需要什
黑龙江金诚职业培训学校地址在什么地方,想过
25岁了去学修手机迟吗
雅座怎么利用微信做会员营销?求大神介绍
用锯子锯锁的话 据那最快
丑驴王驴肉馆怎么去啊,有知道地址的么
CAD保存为图片格式(*.JPG,*.bmp)方法
传奇世界里三大魔兵有什么属性???
金丰豪庭创业中心(西门)地址在哪,我要去那里
巴西奥运会篮球男子决赛冠军会是谁呢,猜一猜
推荐资讯
将军澳地址在什么地方,想过去办事
云晨过桥园这个地址在什么地方,我要处理点事
为什么我网络连接无法共享
天狗食月是咋回事
招待费是入管理费用,还是入销售费用?
刚魍魉雪女,五星雨女到底该带啥
3~4月的淮南适合种什么花?
大连医科大学寝室怎么样
喜欢发这个表情的男的 是属于什么样的人
听说有人把国外的游憩学理论和城市规划、旅游
教师资格证与文凭有关吗
一位猎人晚上打猎时用探照灯照射时,看到一个
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?