一种MFC对话框程序排错的方法
来源:互联网 发布:魅族手机移动数据开关 编辑:程序博客网 时间:2024/05/16 19:28
近日在开发MFC对话框程序时遇到界面卡住无法显示的问题。通过使用一种排查方法,成功解决了这个问题。
具体来说,项目是由Web页面加载OCX控件,OCX控件中创建MFC窗口并显示。此时,Web创建窗口并加载OCX控件,但是加载后MFC窗口并没有完全显示,而是需要把程序窗口最小化,然后再还原才能正常显示。
初步判断该问题为MFC对话框工程中某个窗口创建异常导致。
于是,通过分析该工程框架结构,认清各个窗口之间的关系,从所有窗口的父窗口开始,逐个排查。比如主对话框创建了3个子对话框,就依次把创建3个对话框的代码屏蔽(注释),然后编译生成并运行,查看效果。
通过排查发现,如果把第2个创建窗口的代码屏蔽掉,程序运行后窗口可以正常显示;如果不屏蔽,则窗口无法显示。所以判定出问题的应该是在第2个窗口中。
具体来说,项目是由Web页面加载OCX控件,OCX控件中创建MFC窗口并显示。此时,Web创建窗口并加载OCX控件,但是加载后MFC窗口并没有完全显示,而是需要把程序窗口最小化,然后再还原才能正常显示。
初步判断该问题为MFC对话框工程中某个窗口创建异常导致。
于是,通过分析该工程框架结构,认清各个窗口之间的关系,从所有窗口的父窗口开始,逐个排查。比如主对话框创建了3个子对话框,就依次把创建3个对话框的代码屏蔽(注释),然后编译生成并运行,查看效果。
通过排查发现,如果把第2个创建窗口的代码屏蔽掉,程序运行后窗口可以正常显示;如果不屏蔽,则窗口无法显示。所以判定出问题的应该是在第2个窗口中。
同理,找到第2个窗口创建子窗口的代码,依次屏蔽掉其子窗口创建的代码,并编译运行,查看效果...最后定位到一个窗口创建的代码。该窗口没有子窗口,把该窗口初始化的代码屏蔽掉,发现仍存在问题。于是通过仔细观察发现,该对话框控件在窗口类中定义了一个自定义控件类型的变量。于是将该变量的定义和相关使用处屏蔽,发现程序可以运行。那么这个问题就定位为该自定义控件类型变量存在问题。经过分析发现,该自定义控件类在构造函数中的代码导致了整个窗口刷新异常。然后通过修改该自定义控件类的构造函数最终解决了窗口刷新异常的问题。
该排除法适合于程序存在异常但无法立即准确定位时,通过逐个排除,最终定位并解决异常。
阅读全文
1 0
- 一种MFC对话框程序排错的方法
- 基于对话框的MFC程序实现RTL风格的一种方式
- 相关搜索词的一种粗排方法
- 基于对话框的MFC程序
- MFC学习第十节:输出对话框(第一种方法)
- MFC单文档程序初始化对话框方法
- MFC 对话框程序控件局部刷新方法!
- MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法
- MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法
- MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法
- MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法
- MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法
- MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法
- 一种弹出消息对话框的方法
- 一种自动关闭对话框的简单方法
- 一种自动关闭对话框的简单方法
- 一种自动关闭对话框的简单方法
- MFC中解决基于对话框程序按下Enter,Esc程序自动退出的方法
- linux通过内核启动参数预留系统内存
- [SDUT](2074)区间覆盖问题 ---贪心
- TensorFlow 教程入门
- 操作系统(一)
- 8-30 DAIRY
- 一种MFC对话框程序排错的方法
- java中的Calendar属性详解
- C++实现类似于JAVA的接口
- [bzoj-2730][HNOI2012]矿场搭建 题解
- 17-08-30 请求的转发和重定向
- html随手笔记
- Matlab函数简述
- TensorFlow 搭建mnist项目
- 使用hexo+yilia+github搭建个人博客