`
isiqi
  • 浏览: 15994111 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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这样的情况。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics