一个SDI程序基于CFormView视。上面放一个CStatic控件,给视图添加双击消息,运行程序后,双击视图,会有弹出消息响应。 但是双击CStatic类控件,却没有响应
来源:互联网 发布:邬桑为什么哭 知乎 编辑:程序博客网 时间:2024/05/29 15:18
一个SDI程序基于CFormView视。上面放一个CStatic控件,给视图添加双击消息,运行程序后,双击视图,会有弹出消息响应。
但是双击CStatic类控件,却没有响应,请问如何添加这个消息??
同样的问题,一个派生自CWnd类的控件,创建在CFormView视图上,此时却无法响应鼠标的左右键 双击消息,
请问如何处理?
其实是要求CStatic把消息反射出来.
因为你单击CStatic控件,控件本身接受.主窗口是不接受这个消息的.
你要得到消息,3个办法:
1.创造自己的CStatic扩展类 (子类化亦可), 在自己CStatic扩展类的WndProc中就可以得到双击消息.
2.使用CStatic Notify 的方法,使主窗口可以得到双击的消息
3.使用PreTranslateMessage的方法,该方法能获取所有控件,窗口的消息.
this->ModifyStyle(0, SS_NOTIFY); // 设置 notify
// this->ModifyStyle(SS_NOTIFY, 0); // 取消 notify
CStatic空间的鼠标事件响应,以及...
版权声明:本文为博主原创文章,未经博主允许不得转载。
昨天一直在做avatar头像在工具里的显示,让策划调好头像位置后,保存一个世界矩阵到avatar文件里,游戏里显示avatar头像时,就只需要读取那个世界矩阵就可以了,一切准备工作已经就绪,实验成功了,本来在dialog的消息响应,为了改进操作手段,我决定把鼠标事件放到cstatic里,让策划可以直觉操作,所以,这玩意需要相应2个鼠标事件:
ON_MOUSEMOVE
ON_MOUSEWHEEL
实现当鼠标左键按下,移动鼠标,则移动视图。
当鼠标右键按下,移动鼠标,则旋转avatar。
然而,遇到的问题还是挺多的。
高兴的写好了这些处理代码,各种相应都写好了,结果怎么也相应不了。
原来有一个很重要的原因, 需要给CStatic设置notify,可以在资源界面里改,也可以在创建函数里改,这样一改,就可以支持ON_MOUSEMOVE消息了。可是还有一个,ON_MOUSEWHEEL,还是无法响应。
原来是这样的,CStatic正如其名,他是一个static控件,而static控件默认是无法获取输入焦点的,例如EditCtrl,你一点,就可以输入文字了,但静态控件不同,就是让你看的。所以,为了让它支持支持MOUSEWHEEL消息,就需要让他获取焦点。
简单的,在CStatic 的ON_LBUTTONDOWN和ON_RBUTTONDOWN事件响应里,手动让他SetFocus就行了。
没有焦点的控件,对OnMouseWheel不响应的,所以要下得到焦点.
void CStaticTest::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SetFocus();
CStatic::OnLButtonDown(nFlags, point);
}
//
void CStaticTest::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SetFocus();
CStatic::OnRButtonDown(nFlags, point);
}
现在可以:
BOOL CStaticTest::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: Add your message handler code here and/or call default
AfxMessageBox("haha");//
return CStatic::OnMouseWheel(nFlags, zDelta, pt);
}
一般意义上,控件不响应消息,可能只有2中原因,一种是外部原因,控件的消息被父控件过滤了,还有就是自身原因啦,这个控件,本身它只不支持某种消息呢,或者是否需要打开某种开关才能支持呢,比如像CStatic的notify开关,以及需要获取焦点才能响应MOUSEWHEEL这样的情况。
- 一个SDI程序基于CFormView视。上面放一个CStatic控件,给视图添加双击消息,运行程序后,双击视图,会有弹出消息响应。 但是双击CStatic类控件,却没有响应
- MFC中如何让一个CStatic控件响应消息
- ListControl控件怎么响应双击消息
- Win32控制台程序,ListBox控件响应鼠标单击及双击消息
- MFC中CSTATIC控件双击全屏/双击恢复
- MFC中CSTATIC控件双击全屏/双击恢复
- 关于响应自定义控件双击消息的总结
- CStatic响应消息
- mfc按钮响应双击消息
- SDI在视图类中添加按钮以及消息响应
- 树控件的双击响应
- 如何让自定义的基于CStatic的控件响应鼠标移动的消息
- 如何让自定义的基于CStatic的控件响应鼠标移动的消息
- CRichEdit自动添加的双击消息无响应
- libvlc 双击,鼠标事件消息响应
- 继承MFC控件后怎么响应鼠标单双击事件
- VC轻松实现CTreeCtrl控件双击响应
- VC轻松实现CTreeCtrl控件双击响应
- HDU 1998奇数阶魔方
- ReactNative-WebView组件
- Mysql处理海量数据时的一些优化查询速度方法
- 欢迎使用CSDN-markdown编辑器
- strlen的使用注意事项
- 一个SDI程序基于CFormView视。上面放一个CStatic控件,给视图添加双击消息,运行程序后,双击视图,会有弹出消息响应。 但是双击CStatic类控件,却没有响应
- 什么是EPEL 及 Centos上安装EPEL
- c# 百度语音思路以及核心
- 实现Data类
- linux nc命令
- Java面试准备十二:存储过程
- OpenCV I_07鼠标画笔 setMouseCallback()
- js实验1.入门使用和计时器
- vue进阶