代码之家  ›  专栏  ›  技术社区  ›  Tim

DoModal()未将dlg box作为模态

  •  2
  • Tim  · 技术社区  · 14 年前

    STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
    

    它有一个关联的类(从CDialog派生),当我实例化它时,在 它不是真正的模态-我可以点击“父”窗口。

    CMyDlg dlg;
    int result = dlg.DoModal();
    

    STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
    CAPTION "My Main App"
    MENU IDR_MENU_MAIN
    

    我从主窗口调用的其他dlg框,其中DoModal我想保留为非模态。但另一个我想要莫代尔。

    其他信息:

    此应用程序的GUI不是应用程序的主线程。它是一个命令行应用程序,启动另一个线程并加载一个DLL,其中包含GUI。我不确定这是否与这个问题有关。

    主dlg窗口==A 这个新的dlg box窗口我想表现为modal==B

    在A中:调用B.DoModal不是模态的,但我希望它是

    在C中,如果我调用D.DoModal,它是模态的,我希望保持这种方式(因此应用程序确实显示了模态功能)

    来自: 调用标准文件“打开”或“另存为dlg”框将导致非模态dlg框。

    CFileDialog dlg(TRUE);
    dlg.DoModal();
    

    这两个问题似乎对其中一个问题有一些很好的可能性,但是它们没有解决如何确保调用的标准文件open/save dlg是模态的。。。

    Convert a modeless dialog to modal at runtime How do I create Modal dialog in worker thread(Non-UI thread)?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Cheers and hth. - Alf    14 年前

    我看不出你在为模态对话框指定父窗口。

    也许这就是我们所缺少的。

        2
  •  -1
  •   thkala jaxb    12 年前

    如果要从.rc文件加载对话框,请在创建对话框对象时指定资源id。

    CMyDlg dlg(IDR_DLG1); 
    int result = dlg.DoModal();