mfc - 检测 MFC 中的模态对话框

标签 mfc modal-dialog

如何以编程方式检测我的 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())

有人有检测模态对话框的替代方法吗?

最佳答案

你试过了吗 CWnd::GetLastActivePopup ?

我还没有测试过它是否只适用于模态对话框。

编辑 1:根据 Raymond Chen , GetLastActivePopup应该返回当前事件的模态对话框。

编辑 2:也许另一种检索当前模态窗口的方法是修改您的代码以检查禁用的父/所有者 - 模态对话框应始终 disable their owner在显示之前。

关于mfc - 检测 MFC 中的模态对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1298945/

相关文章:

javascript - 显示模式时添加模糊类,隐藏模式时删除

MFC 中的 C++ GUI - 分页小部件

c++ - 有什么办法可以使 SHFileOperation 成为模态吗?

c++ - CWinApp::OpenDocumentFile 创建一个新窗口

c++ - DLL 创建类型

jquery - 获取 Jquery UI 日历以显示在模态弹出窗口顶部

javascript - 如果表单提交有效,则 MVC 显示模态

c++ - dlg 类中是否有 getdocument() 函数?

javascript - 将值传递给 Bootstrap Modal JavaScript 和 PHP

javascript - 使用 javascript 打开 CSS 模态对话框