一个图形绘制时的问题

在绘制图形(比如直线、椭圆、矩形等)时,我们通常利用两个消息响应函数即可完成:WM_LBUTTONDOWN和WM_LBUTTONUP。在使用单文档模板创建应用程序时,我们须注意一个小细节,通常单文档应用程序的标题栏都支持双击最大化功能,当在绘图过程中双击标题栏最大化时经常看到又多了一个预期外的图形。这种情况是应用程序在响应鼠标单击、双击的先后顺序的不同造成的,鼠标双击一次可分解成两次单独的单击的组合,于是依次发出5个消息:WM_LBUTTONDOWN---->WM_LBUTTONUP---->WM_LBUTTONDOWN---->WM_NCLBUTTONDBLCLK---->WM_LBUTTONUP.通常问题的关键在于WM_NCLBUTTONDBLCLK消息响应之后,系统又响应了一个WM_LBUTTONUP消息。而我们的作图代码通常又放在该消息处理函数之中或被其调用。具体的解决方法可以在框架类中重载BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 函数,截获WM_NCLBUTTONDBLCLK消息并放弃对该消息的响应,这样可以消除原来的问题,但同时也使得应用程序窗体失去了双击最大化的功能;另外一个方法是在BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 函数中设置一个静态布尔型开关变量bDBCLK,初始化该变量为FALSE,当截获的消息为WM_NCLBUTTONDBLCLK时设置其为TRUE;当截获的消息为WM_LBUTTONUP消息时首先判断bDBCLK是否为真,若为真则放弃对该消息的处理,同时设置bDBCLK为FALSE,否则进行消息响应。这种做法就是在WM_NCLBUTTONDBLCLK消息响应后放弃对WM_LBUTTONUP消息的响应即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值