MFC中遇到的一些问题

本文详细探讨了MFC中消息响应的关键点,包括Timer的精度限制和多媒体定时器的使用。此外,还分析了OnClose()与OnDestroy()的区别,以及在关闭对话框时的不同关闭路由。最后,介绍了assert()函数的用法和注意事项,强调了在调试和性能优化中的平衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 WM_TIMER消息响应中的一些重要的知识点

  1. Timer使用的是时间中断响应计时,windows的时间中断每1/18秒触发一次,所以Timer最低精度约在55ms,低于这个时间则精度不够。
  2. 如果要启动多个定时器就多次调用SetTimer成员函数。另外,在不同的CWnd中可以有ID相同的定时器,并不冲突。(百度百科:TIMER
  3. 如果要实现更高精度的定时可以使用多媒体定时器,其函数timeSetEvent()(未测试)

2 使用Invalid()刷新窗口会闪屏

解决办法1:把dialog的ClipChildren属性设置为true。意思就是,在绘制窗口的时候,把控件区域剪切掉,等绘制完成后在复制回来,这个属性简直就是为绘制量身定制的,于是上面的问题解决了,并且如此简单,就点一下。原来解决方案如此简单。
此方法作者说有可能出现问题:如果频繁进行绘制刷新,这个毫无疑问会出现闪屏的情况。
解决办法:运用双缓冲,无压力。就是在每次绘制的时候,直接贴上去。


OnClose()和 OnDestroy()的区别

原文地址:总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别

  1. OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数, 即WM消息响应函数。 从应用程序结构的角度,拿对话框来说,红色的X对应的是CWnd,而处于对话框中的“确定”、“取消”按钮则对应了CDialog。

  2. OnClose()和OnDestroy()在单视图程序中,根据<<深入浅出MFC>>所讲,程序退出时执行的操作顺序为(从点X按

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值