我有一个窗口,其中包含以下属性:.rc file:
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
它有一个关联的类(派生自CDialog),当我实例化它时,然后调用该对象的DoModal() 它不是真正的模态 - 我可以点击“父”窗口。
CMyDlg dlg;
int result = dlg.DoModal();
“父”窗口是一个dlg框,但被视为主窗口。它的属性是:
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "My Main App"
MENU IDR_MENU_MAIN
我从DoModal的主窗口调用的其他dlg框我想离开而不是模态。但另一个我想有模态。
我对发生的事情感到有点困惑。有人可以解释如何让这个“孩子”dlg盒子成为模态(同时允许其他“孩子”不是模态的吗?
其他信息:
此应用的GUI不是应用的主要线程。它是一个命令行应用程序,它启动另一个线程并加载包含GUI的DLL。我不确定这是否与这个问题有关。
主要dlg窗口== A. 这个新的dlg框窗口我想表现为modal == B. 一个不同的dlg框== C
在A中:调用B.DoModal不是模态的,但我希望它是 在A:调用C.DoModal不是模态的,我想保持这种方式
在C中,如果我调用D.DoModal它是模态的,我想保持这种方式(所以app确实显示模态功能)
更可怕的信息
来自A: 调用标准文件打开或保存为dlg框导致NON MODAL dlg框。
CFileDialog dlg(TRUE);
dlg.DoModal();
这也是不可取的。
这两个问题似乎对其中一个问题有一些很好的可能性,但它们没有解决如何确保标准文件打开/保存被调用的dlgs是模态的...
Convert a modeless dialog to modal at runtime How do I create Modal dialog in worker thread(Non-UI thread)?
答案 0 :(得分:3)
我没有看到您为模态对话框指定了父窗口。
也许这就是缺乏的。
答案 1 :(得分:-1)
如果要从.rc文件加载对话框,请在创建对话框对象时指定资源ID。
CMyDlg dlg(IDR_DLG1);
int result = dlg.DoModal();