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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值