DoModal () не вызывает окно dlg как модальное - PullRequest
2 голосов
/ 26 октября 2010

У меня есть окно со следующими свойствами, установленными в файле .rc:

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

Другие ящики dlg, которые я вызываю из главного окна с помощью DoModal, ХОЧУ оставить как не модальные. Но этот другой я хотел бы иметь модальный.

Я немного смущен тем, что происходит. Может кто-нибудь объяснить, как сделать так, чтобы этот "дочерний" блок dlg был модальным (в то время как другие "дети" не должны быть модальными?

Дополнительная информация:

Графический интерфейс для этого приложения не является основным потоком приложения. Это приложение командной строки, которое запускает другой поток и загружает DLL, в которой содержится графический интерфейс. Я не уверен, имеет ли это какое-либо отношение к проблеме.

Главное окно dlg == A Это новое окно dlg я хочу вести себя как модальный == B Другая коробка dlg == C

Внутри A: вызов B.DoModal не является модальным, но я бы хотел, чтобы это было Внутри A: вызов C.DoModal не является модальным, и я хочу сохранить его таким образом

В C, если я вызываю D.DoModal, это модально, и я хочу сохранить его таким образом (чтобы приложение показывало модальную функциональность)

Более страшная информация

от А: вызов стандартного файла открыть или сохранить как поля dlg приводят к НЕ МОДАЛЬНЫМ окнам dlg.

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

Это тоже нежелательно.

Похоже, что эти два вопроса имеют некоторые хорошие возможности для решения одной из проблем, но они НЕ касаются того, как убедиться, что стандартные файлы open / save, которые вызываются, являются модальными ...

Преобразование немодального диалога в модальное во время выполнения Как создать модальное диалоговое окно в рабочем потоке (не в пользовательском интерфейсе)?

Ответы [ 2 ]

3 голосов
/ 26 октября 2010

Я не вижу, что вы указываете родительское окно для ваших модальных диалогов.

Возможно, этого не хватает.

0 голосов
/ 26 октября 2010

Если вы загружаете диалоговое окно из файла .rc, укажите идентификатор ресурса при создании объекта диалога.

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