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