起動時、メインウインドウの上にダイアログを出したい

[戻る]
kyu 2003/11/06(木) 14:26:50
SDIアプリケーションの起動時に、モーダルダイアログを出したいです。

CFormView派生のクラスのOnInitialUpdateで、DoModalしたら
ダイアログだけが出て、OK or Cancelの後、メインウインドウが
表示されてしまいました。

起動時、メインウインドウの上に表示されるような形で出したいんですけど、
どこでDoModalしたらいいのかわかりません。

流れとしては
アプリ起動
↓
ダイアログ出る
↓
OK or Cancelの結果によってCFormViewの表示を替える

どなたかわかりますか?

winxp vc6 MFC

kuo 2003/11/06(木) 15:58:31
C***App::InitInstance()の最後のあたり

    // メイン ウィンドウが初期化されたので、表示と更新を行います。
から
    return TRUE;
までの間

wood 2003/11/06(木) 16:55:01
VSWAP32 参考にしてみては?
ありかは、過去ログ捜すと出てくるよ

kyu 2003/11/06(木) 18:04:36
[[解決]]
一応解決しました。
CView系派生クラスでOnCreateをオーバーライド。
OnCreateは表示前に呼ばれるわけなので、OnCreateで、
俺定義メッセージを自分自身にPostMessageする。
PostされたMessageを、自分自身の俺定義メッセージハンドラで受け取り、DoModal。
これでOnCreateが終了した後になるのでうまい具合に
ダイアログがでました。


> C***App::InitInstance()の最後のあたり

でも、なりました。どうもでした。

> VSWAP32 参考にしてみては?

どうもでした。

ちなみに、CxxAppで、そういう動作ルーチンを入れるのは
セオリーなんですか?VSWAP32でもなんかやってみるたいでしたけど。
doc/view的っていえるんでしょうか?

PATIO 2003/11/07(金) 10:34:39
解決つけてるのに質問が続いているような。(^^;

doc/view構造と起動時のダイアログ表示とにどういう関連があるのか分かりませんが、
doc/viewは、表示対象のデータを管理する部分と表示する部分の関係を分けることで
docとviewの組み合わせに自由度を持たせる事が目的なんだと思うので
起動時のダイアログ表示とは分けて考えてもいいと思います。
起動時のダイアログを特定のviewとセットにしたいのであれば、
kyuさんのような考え方もあるでしょうけれど。

起動時のダイアログ表示の場合、キャンセルされたときに表示しないで終了したい
場合もあるので私もC***App::InitInstanceに入れますね。
キャンセルされたときは、ウインドウの生成をしないで終了させてしまいます。

kyu 2003/11/07(金) 19:51:39
>起動時のダイアログ表示とは分けて考えてもいいと思います。
>起動時のダイアログを特定のviewとセットにしたいのであれば、

なるほど。

イメージ的には、

・起動時のダイアログでキャンセルのときは、何も無いメインウインドウのみ。
・メニューで、またダイアログ出す。
・ダイアログのOKの結果によってviewの(中のタブ)内容が変わる。

だったです。
とりあえず、やり方的にはズレてなさそうなのでよかったです。
ありがとうございました。

古いスレッドには追加発言できません。