Как я могу программным образом определить, показывает ли мое приложение MFC в настоящее время модальное диалоговое окно или лист свойств? В настоящее время я использую следующее, но я чувствую, что этот код также запускает для немодальных диалогов.Обнаружение модальных диалогов в MFC
bool HasModalDialog(const CWnd* pWnd)
{
const CWnd* pChildWnd = pWnd ? pWnd->GetNextWindow(GW_HWNDPREV) : NULL;
while (pChildWnd)
{
if (pWnd == pChildWnd->GetTopLevelParent() &&
(pChildWnd->IsKindOf(RUNTIME_CLASS(CDialog)) ||
pChildWnd->IsKindOf(RUNTIME_CLASS(CPropertySheet))))
{
return true;
}
pChildWnd = pChildWnd->GetNextWindow(GW_HWNDPREV);
}
return false;
}
Использование:
HasModalDialog(AfxGetMainWnd())
Каждый получил альтернативный способ обнаружения модальные диалоговые окна?
Я не вижу, как ваш код на самом деле определяет модальный диалог. Если CDialog или CPropertySheet были «Создать», тогда он будет немодальным, и ваш код будет STILL возвращать true. – Goz
@Goz: Это проблема, из-за которой страдает код. – dalle