Вызов второго диалога из диалогового окна не может сделать ни один активный - PullRequest
1 голос
/ 22 февраля 2010

Извините за глупые вопросы, я делаю все как описано в этом уроке: http://www.functionx.com/visualc/howto/calldlgfromdlg.htm

Я создаю диалоговое окно и пытаюсь вызвать другое диалоговое окно в ответ на нажатие кнопки, используя следующий код:

CSecondDlg Dlg;
Dlg.DoModal();

Модальное окно появляется, но не активно, и главное окно тоже не активно, и все отстает. Вот скриншот:

Два диалоговых окна, мешающие друг другу http://img713.imageshack.us/img713/3919/63418833w.gif

А вот определения для моих диалогов:

IDD_DIARY_TEST_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "diary_test"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "Second",IDC_SECOND_BTN,209,179,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,263,179,50,14
    CTEXT           "TODO: Place dialog controls here.",IDC_STATIC,10,96,300,8
END

IDD_SECOND_DLG DIALOGEX 0, 0, 195, 127
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_DISABLED | WS_CAPTION
CAPTION "Second"
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
    LTEXT           "TODO: layout property page",IDC_STATIC,53,59,90,8
    PUSHBUTTON      "Button1",IDC_BUTTON1,61,93,50,14
END

Ответы [ 2 ]

4 голосов
/ 22 февраля 2010

Давайте просто сравним стили двух диалогов:

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

Я указал различия в полужирный , и причина ваших проблем теперь должна быть очевидна: ваш второй диалог отключен (WS_DISABLED), что препятствует его активации! Другое отличие, отсутствующий стиль DS_MODALFRAME, заставит его выглядеть немного ненормальным (но не должно сильно влиять на поведение); окончательная разница (WS_SYSMENU) просто не позволяет отображать системное меню (и левый значок, правая кнопка закрытия).

Другая странность, показанная на вашем скриншоте, второе диалоговое окно, отображаемое смешанным с элементами управления на первом, возможно, связано с вашим первоначальным использованием WS_CHILD в качестве догадки ...

Учитывая этот и другой код, который вы разместили, я подозреваю, что вы изначально создали это как страницу свойств. Страницы свойств, в то время как похожи на обычные диалоговые шаблоны, предназначены для отображения в качестве дочерних окон; обычные модальные диалоги не .

3 голосов
/ 22 февраля 2010

Вы не показываете свой исходный код, но вероятно, что ваше второе диалоговое окно определено как дочернее окно вместо всплывающего окна. Просто проверьте в редакторе ресурсов.

...