1 WM_TIMER
消息响应中的一些重要的知识点
- Timer使用的是时间中断响应计时,windows的时间中断每1/18秒触发一次,所以Timer最低精度约在55ms,低于这个时间则精度不够。
- 如果要启动多个定时器就多次调用SetTimer成员函数。另外,在不同的CWnd中可以有ID相同的定时器,并不冲突。(百度百科:TIMER)
- 如果要实现更高精度的定时可以使用多媒体定时器,其函数
timeSetEvent()
(未测试)
2 使用Invalid()
刷新窗口会闪屏
解决办法1:把dialog的ClipChildren属性设置为true。意思就是,在绘制窗口的时候,把控件区域剪切掉,等绘制完成后在复制回来,这个属性简直就是为绘制量身定制的,于是上面的问题解决了,并且如此简单,就点一下。原来解决方案如此简单。
此方法作者说有可能出现问题:如果频繁进行绘制刷新,这个毫无疑问会出现闪屏的情况。
解决办法:运用双缓冲,无压力。就是在每次绘制的时候,直接贴上去。
OnClose()和 OnDestroy()的区别
原文地址:总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数, 即WM消息响应函数。 从应用程序结构的角度,拿对话框来说,红色的X对应的是CWnd,而处于对话框中的“确定”、“取消”按钮则对应了CDialog。
OnClose()和OnDestroy()在单视图程序中,根据<<深入浅出MFC>>所讲,程序退出时执行的操作顺序为(从点X按