ダイアログを複数回表示するには?

解決


BellWood  2003-01-29 08:01:35  No: 50971

MFC にてダイアログベースのアプリを作成しています。
通常、ClassWizard でプロジェクトを作成すると、
CWinApp の派生クラスと CDialog の派生クラスが作成され、
CWinAppXXXX::InitInstance()上に CDialogXXXX のインスタンスが作成され、
アプリケーション起動と同時にダイアログボックスが表示されます。

さて、このプロセスをバックグランド化させるために、
CWinAppXXXX::InitInstance() 内でループをつくり、
あるトリガーで CDialogXXXX をモーダルウィンドウとして
表示させたいのですが、そのトリガーが発生し1回目はダイアログが
正常に表示されるのですが、2回目以降は表示ができなくなります。
(一瞬表示はされる。)
DoModal() の復帰値は -1 で GetLastError() は 0 を返します。

正常(期待通り)に動作させる方法をご存じではないでしょうか?
よろしくお願いします。


YuO  2003-01-29 09:03:38  No: 50972

毎回オブジェクトを作り直してみてはどうでしょう。
#動くかどうかの保証はしませんが……。


BellWood  2003-01-29 18:52:13  No: 50973

散々やりましたがNGでした。


YuO  2003-01-29 21:14:25  No: 50974

とりあえず,VC++5sp3onNT4sp6aという環境において,
大元はSDIですが,
for (int i = 0; i < 5; ++i) {
    CDialog1 d;

    d.DoModal();
}
のようにしたところ,問題はなかったですが。

ループの部分の根幹のコードを書いてみてください。


BellWood  2003-01-29 22:10:35  No: 50975

YuOさん、おつきあいありがとうございます。
SDIベースでテストし、何が違うのかと思いきや、
スケルトンで吐かれた m_pMainWnd = &dlg; を
コメントアウトしたらダイアログベースでも期待通りに動作しました。
ありがとうございました。


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

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






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