MFC немодальный и модальный диалог - PullRequest
1 голос
/ 21 февраля 2011

У меня есть приложение с иконкой в ​​трее.Существует скрытое главное окно (CMainFrm), которое используется для обработки сообщений о значках в трее.Значок на панели задач имеет контекстное меню: Настройки, Справка, Команды выхода.

Когда пользователь выбирает Настройки, отображается диалоговое окно немодальных настроек (родительский: GetDesktopWindow ()).Диалог настроек имеет кнопку обзора, которая отображает MyBrowseFolderDialog как модальный!Итак, существует проблема, когда отображается это диалоговое окно, и пользователь пытается закрыть приложение с помощью команды «Выход» из меню в области уведомлений.

Кто-нибудь знает, как изящно закрыть приложение со всеми этими диалогами?Меню в трее => Диалог настроек (немодально) => BrowseDialog (модально)

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Добавьте элемент CDialog * m_pModaldDlg в класс диалога настроек, инициализируйте его значением NULL в конструкторе. Когда отображается MyBrowseFolderDialog, установите для него указатель этого диалогового окна:

MyBrowseFolderDialog dlg();
m_pModaldDlg = &dlg;
dlg.DoModal();
m_pModaldDlg = NULL;

В обработчике сообщений выхода:

if ( m_pModaldDlg )
    m_pModaldDlg->EndDialog(0);
// Close settings dialog
0 голосов
/ 14 марта 2011

Алекс ответ все еще хорош - вы должны сохранить m_pModalDlg в CMainFrm, чтобы обработчики параметров и выхода могли получить к нему при необходимости.

Некоторые другие возможные решения:

  1. Обработчик настроек отключает опцию «Выход», когда просмотр папки активен

  2. Зарегистрировать пользовательское сообщение - обработчик выхода отправит это сообщение в папку просмотра (хотя вам все еще понадобитсякакой-то дескриптор окна)

Мне больше нравится ответ Алекса - просто храните указатель где-то в CMainFrm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...