CDialog::Createで、モーダル的ウインドウを作成するには

解決


CGK  2005-09-30 19:36:31  No: 59178

CDialog::Createで、モーダル的ウインドウを作成するには

あるアプリケーションにて、処理中にエラーが発生したときに、
アプリとは別にダイアログを表示してエラー通知するプログラムを作成しております。
その際に、

1.エラーが連続して発生する可能性があり、前のエラーダイアログ
を破棄して後から発生したエラーダイアログを優先して表示したい。
2.仕様上、このエラーウインドウを閉じないとアプリのメイン操作を行えないようにしたい。

この仕様を満たすため、閉じないと処理が戻ってこないCDialog::DoModalではなく、CDialog::Createでエラーダイアログを作成しているのですが、CDialog::Createで作成しているため、エラーダイアログ表示中でもメインウインドウを操作出来てしまい困っております。
この仕様を満たすため、CDialog::Createで、モーダル的な動作をするウインドウを作成出来ないでしょうか。


dairygoods  2005-09-30 20:23:01  No: 59179

メインウィンドウをEnableWindow(FALSE)で操作不能にしておけばよいです。
用が済んだらEnableWindow(TRUE)。

(モーダルダイアログは単にそれを自動でやっているだけです)


CGK  2005-10-01 01:23:53  No: 59180

dairygoodsさん、回答ありがとうございます。
EnableWindow(FALSE)では、操作不能になりませんでしたので、DoModal内の処理を参考に下記のように実装したところ期待通り動作いたしました。

{
  HWND hWndParent = CWnd::GetSafeOwner_(m_pParentWnd->GetSafeHwnd(), &m_hWndTop);
  if (hWndParent != NULL && ::IsWindowEnabled(hWndParent))
  {
    ::EnableWindow(hWndParent, FALSE);
  }
}

また、EnableWindow(TRUE)する側は、特に実装しなくても問題ありませんでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加