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的问题!

  • 相关阅读:
    CSS 的层叠上下文是什么
    BFC原理解析
    从 (a==1&&a==2&&a==3) 成立中看javascript的隐式类型转换
    IIFE中的函数是函数表达式,而不是函数声明
    Virtual DOM 真的比操作原生 DOM 快吗?
    解决for循环里获取到的索引是最后一个的问题
    bzoj4161: Shlw loves matrixI
    [NOI2007]生成树计数环形版
    bzoj1494: [NOI2007]生成树计数
    bzoj1964: hull 三维凸包
  • 原文地址:https://www.cnblogs.com/autumoonchina/p/15272992.html
Copyright © 2011-2022 走看看