VS2015-MFC 之 也谈 Button重绘
2018-01-10 10:19
239 查看
接手同事售后软件的工具开发项目,因为UI设计问题,稍接触了一下Button重绘。
项目第一个问题是debug模式会报断言错误,release模式是正常的。询同事得知,知道debug模式有问题,所以一只都在release模式下下断点……
一步步加断点,debug发现是在WM_DRAWITEM消息的实现部分OnDrawItem(int
nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct )出现断言错误。
看代码没发现特别的异常,但把所有按钮的【Owner Draw】属性改为false后就不会再出现断言错误。
同事按钮重绘部分是按如下链接方式实现: http://blog.csdn.net/fevershen/article/details/42103471
以上,发现Assertion原因如下:
因为要绘制的Button控件在以前进行过消息绑定,需要将所有需要重绘的button的所有在映射函数DoDataExchange()的消息绑定的语句注释掉(为避免遗漏,建议右键->查找所有引用的方式,对查找到的所有消息绑定进行注释):
//DDX_Control(pDX, IDC_BUTTON_mini, button_mini);
//DDX_Control(pDX, IDC_BUTTON_close, button_close);
按照以上方法修改后,成功解决!!
方法二(未验证): 自定义Button类的方案,参见: http://blog.sina.com.cn/s/blog_65cab32d01013uad.html
项目第一个问题是debug模式会报断言错误,release模式是正常的。询同事得知,知道debug模式有问题,所以一只都在release模式下下断点……
一步步加断点,debug发现是在WM_DRAWITEM消息的实现部分OnDrawItem(int
nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct )出现断言错误。
看代码没发现特别的异常,但把所有按钮的【Owner Draw】属性改为false后就不会再出现断言错误。
同事按钮重绘部分是按如下链接方式实现: http://blog.csdn.net/fevershen/article/details/42103471
以上,发现Assertion原因如下:
因为要绘制的Button控件在以前进行过消息绑定,需要将所有需要重绘的button的所有在映射函数DoDataExchange()的消息绑定的语句注释掉(为避免遗漏,建议右键->查找所有引用的方式,对查找到的所有消息绑定进行注释):
//DDX_Control(pDX, IDC_BUTTON_mini, button_mini);
//DDX_Control(pDX, IDC_BUTTON_close, button_close);
按照以上方法修改后,成功解决!!
方法二(未验证): 自定义Button类的方案,参见: http://blog.sina.com.cn/s/blog_65cab32d01013uad.html
相关文章推荐
- 【初级】VS2015/MFC设置工具栏按钮提示
- 在VS2015下通过MFC实行对IE浏览器Internet Explorer类的控制 控制的工具CrystalDiskMark
- Seetaface 01 Seetaface win10 vs2015编译(cmake自动配置,可选mfc界面)
- VS2015/MFC编辑框基本操作
- llbird的MFC串口操作库CnComm断言问题探讨及vs2015修正
- VS2015 MFC提示“项目文件被卸载”
- MFC异步WSAAsyncSelect 在vs2015下编译出错的问题
- 关于vs2015MFC中不能编辑ICON图像问题
- VS2015 MFC组合框控件
- 【VS2015 MFC】bitmap图片加载实现进度条变化
- VS2015动态库编程之MFC规则动态库(中)
- MFC随笔---VS2015创建MFC项目
- VS2015下MFC程序调用控制台失败解决办法
- vs2015 MFC工程添加消息响应函数
- C++ MFC / VS2013 之二十(常用控件:按钮控件Button、Radio Button和Check Box)
- VS2015动态库编程之MFC规则动态库(下)
- vs2015 MFC中动态显示图片
- VS的mfc中将位图覆盖到button按钮上
- MFC:重绘Button,定制CButton,自画CPngButton,求赐教(各种bug包括性能bug)谢谢谢谢
- PCL1.8.0 VS2015 MFC显示