CScrollView嵌入对话框中无法响应WM_MOUSE WHEEL 消息

本文介绍了在MFC应用中,CScrollView嵌入对话框显示图像时遇到的WM_MOUSE WHEEL消息未响应的问题。分析原因是CScrollView没有获取焦点,导致滚轮消息被对话框处理。解决方法是在CScrollView的OnMouseMove和OnLButtonDown等函数中设置焦点,通过调用SetFocus()确保在鼠标操作时CScrollView获得焦点,从而正确响应滚轮消息。
摘要由CSDN通过智能技术生成

1:问题描述:当使用CScrollView来显示图像时,往往需要将它嵌入到对话框中,当嵌入对话框之后,显示图像,使用放大镜查看图像时,发现使用WM_MOUSE WHEEL消息来放大和缩小放大镜,结果消息未响应

2:分析原因:跟着调试发现,CScrollView嵌入对话框后,滚动鼠标滚轮,发现响应的是对话框的滚轮滚动消息处理,而为进入CScrollView的消息中去,分析原因是有可能鼠标发出的滚轮消息未被CScrollView所接收,未被接收而被其它窗口接收,说明当前获得焦点的窗口并非是CScrollView,因此可以分析出是CScrollView为获得焦点导致的。

3:解决方法:根据上面分析的原因,可以推测出只要有办法在使用滚轮消息前,使CScrollView获得焦点,即可解决问题,经过跟踪发现,当鼠标移动到CScrollView视图区域时,CScrollView的OnMouseMove,OnLButtonDown等消息处理函数都能响应,因此只需要再这些函数执行时,使CScrollView获得焦点。使用获得焦点函数this->SetFocus();即可

4:示例代码:

class CDisPlayImageView : public CScrollView
{

..............................

 afx_msg void OnMouseMove(UINT nFlags, CPoint point);
 afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
};

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值