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())
?
に初期化されたとして真isModalはまだNULL_PTRます。 CDialogまたはCPropertySheetが "作成"されていれば、それはモードレスであり、コードはまだtrueを返します。 – Goz
@ Goz:それはコードが苦しんでいる問題です。 – dalle