zoukankan      html  css  js  c++  java
  • 模态对话框创建失败的原因

    今天编写一个MFC的文档/视图结构程序,点击菜单项弹出相应的模态对话框。但是遇到一个很诡异的问题:新添加的菜单项点击后有响应(可以跟踪到),但是对话框却没有弹出。

    观察DoModal()函数的返回值发现,返回一直为-1,也就是模态对话框创建失败。最后发现是因为对话框中两个DirectX插件失效。由于编译时没有错误,所以一直没注意,弄得还以为是代码部分错了。看了下搜到的资料,模态对话框失败的可能原因还真多:

    DoModal失败原因

    1、MFC

    通常对话框不显示的原因有

    1 父窗口HWND无效

    2 在ONINITDIALOG里用了ENDDIALOG

    3 无效的对话框资源ID

    4 使用没有注册的的自定义控件

    5 对话框的某些控件创建失败,如RICHEDIT,要加上AfxInitRichEdit();

    6 GDI资源无效

    7 初始化ActiveX控件失效

    8 从DLL中加载资源失效

    最有可能出现的是第3条,因此,又经过仔细分析了对话框中的各个资源的ID,终于找到了问题,原来是出在一个菜单栏的ID上面, 在对话框的属性的菜单栏中有一个ID(因为这个对话框是复制过来的,而且原来的对话框有菜单栏的,但是现在这个对话框没有),所以呢,ID虽然存在,但 是,现在的程序中并没有对应的资源,所以,通过讲菜单栏那项设置为空,这样,程序就OK了。

    2、dll

    使用:

    AFX_MAMAGE_STATE(AfxGetStaticModuleState());

    CTestDlg dlg;

    int rlt = dlg.DoModal();

     3、前些日子做一个项目中,需要用到一个对话框。 但是对该对话框使用DoModal函数后该对话框死活弹不出来,单步跟踪的时候也没发现什么大问题。在网上搜索了很多方法都不奏效。后来发现原来是该对话框的属性里面设置了 WS_CHILD 属性。把该属性去掉程序立即可以成功运行了。在项目开发过程中这种问题是最令人心烦的,虽然不是很复杂,却也令人头疼不已。在这里写出来希望对大家有所帮助

    4、当unicode时候,对话框不显示~~~,改为多字符则可以,郁闷,MFC这个框架真坑爹!

    我遇到的问题为上面的第5条,当时真的没想到会是RichEdit的问题!

  • 相关阅读:
    Python接口自动化之测试用例加载到测试套件的几种方法
    python接口自动化之logging日志模块相关
    Fiddler篡改请求参数后重新发起请求操作
    python接口自动化之request模块一些注意事项
    MAC系统下python放webdriver等文件路径
    python安装suds模块提示ModuleNotFoundError: No module named 'client'
    mac系统利用命令安装jenkins
    linux命令
    python 连接数据库,查询结果写入数据到excel
    python连接mysql数据表查询表获取数据导入到txt中
  • 原文地址:https://www.cnblogs.com/autumoonchina/p/15272992.html
Copyright © 2011-2022 走看看