如何以编程方式检测我的 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;
}
Usage:
HasModalDialog(AfxGetMainWnd())
有人有检测模式对话框的替代方法吗?
你有没有尝试过CWnd::GetLastActivePopup?
我还没有测试过它是否仅适用于模式对话框。
Edit 1:根据陈雷蒙德, GetLastActivePopup
应该返回当前活动的模式对话框。
Edit 2:也许检索当前模式窗口的另一种方法是修改代码以检查禁用的父/所有者 - 模式对话框应该始终禁用其所有者在显示之前。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)