【35】MFC入门到精通——MFC运行 不显示对话框 MFC界面不显示
文章目录
- 1 常见原因
- 2 逐个分析
- 2.1 无效的对话框资源ID
- 2.1.1 同一ID,两个不同的值
- 2.1.2 两个ID,同一个值
- 2.1.3 对话框ID 被误改
- 2.2 资源占用冲突
- 2.3 父窗口HWND无效
- 2.4 在ONINITDIALOG里用了ENDDIALOG
- 2.5 使用没有注册的的自定义控件
- 2.6 对话框的某些控件创建失败,如RICHEDIT,要加上AfxInitRichEdit();
- 2. 7 可能是程序中存在其他错误
- 3 如果以上方法均无效
1 常见原因
出现这种情况可能是因为以下几个原因:
前两种情况 都是我是实际遇到过的
1 无效的对话框资源ID2 资源占用冲突3 父窗口HWND无效4 在ONINITDIALOG里用了ENDDIALOG5 使用没有注册的的自定义控件6 对话框的某些控件创建失败
2 逐个分析
2.1 无效的对话框资源ID
可能是因为代码中使用了错误的对话框资源ID或者更新了对话框资源但程序没有重新编译导致。检查对话框资源ID是否与程序中代码一致。
2.1.1 同一ID,两个不同的值
int nResponse = dlg.DoModal();后发现返回为-1,
不能弹出显示对话框,后来核对了一下resource.h,本工程里面有两个,对于同一个宏
两个值不一致。改为一致就可以了。
2.1.2 两个ID,同一个值
其实这两个ID编号,对应的是同一个 控件,
因为修改过多次ID名,可能造成多个ID同一个值
删掉没有使用的ID,即可
2.1.3 对话框ID 被误改
注意下面是一个对话的属性,
在多个对话框的程序中,有一次一不小心,把其中一个对话框ID 该成下拉框里面的随机的一个了。
导致运行没有MFC界面
找到原来的 ID名改回来就好
2.2 资源占用冲突
之前电脑外接一个串口COM5,使用正常;
为了测试多个串口,使用了虚拟串口软件,虚拟出了COM1,COM2
当我运行程序,第一次修也还正常,在程序页面选择了 COM2,就关闭了程序,再次运行程序 整个MFC对话框界面就是不出来。
后来把虚拟串口删除了,程序又好了。
分析:应该是我程序,没有写关闭串口函数,当我连接串口后,没有关闭串口,直接关闭了程序,此时PC和串口仍然是连接状态,下次运行程序有冲突
。
2.3 父窗口HWND无效
2.4 在ONINITDIALOG里用了ENDDIALOG
代码中没有正确调用DoModal函数。文件打开对话框需要在程序中调用DoModal函数才能显示出来。确认程序代码中是否正确调用了DoModal函数。
2.5 使用没有注册的的自定义控件
2.6 对话框的某些控件创建失败,如RICHEDIT,要加上AfxInitRichEdit();
2. 7 可能是程序中存在其他错误
可能是程序中存在其他错误导致程序无法正确运行,需要仔细排查程序代码除文件打开对话框之外的其他部分。
仔细排查程序除文件打开对话框之外的其他部分是否存在其他错误。
3 如果以上方法均无效
可以尝试重新创建一个新的MFC项目,将原有代码逐一复制粘贴到新项目中去。
MFC中文件打开对话框显示不出来?
MFC 对话框不显示,返回-1 原因