• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ウインドウ1→ウインドウ2→)

ウインドウの遷移コードについて

このQ&Aのポイント
  • ウインドウの遷移において、MFCのCDialogを使用する場合はDoModal関数を使い、ボタンが押されるまで処理が止まります。
  • 一方、通常のWindowSDKプログラミングでは、メッセージループを使用してウインドウの遷移を制御します。
  • 具体的なコーディング方法は、ウインドウを表示し、メッセージループを開始してウインドウが閉じられるまで待機し、次のウインドウを表示する、という手順で行います。

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

メッセージループの場所が変わっても何の問題もありません。 例えアプリケーション内で1ヶ所にまとめてあったとしても、ダイアログやメッセージボックスを出すたびにWindowsが内部的に持つメッセージループが実行されるので同じことです。

furyfox
質問者

お礼

とても参考になりました。 ご回答有難うございました。

その他の回答 (2)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

リソースファイルを使わないとなると、やり方は2種類しかありません。 1つはCreateWindows等でウィンドウを自前で作成し、その中にコントロールも自前で配置する方法。メッセージループは自分で作成する必要があります。と言っても、大変なのはメッセージループではなくコントロールの自前配置の部分だと思いますが。 もう1つは「ダイアログリソース」互換のバイナリデータ(ダイアログテンプレート)をメモリ上に用意しておいて、CreateDialogIndirectを使う方法です。こちらは通常のダイアログボックス相当なので、メッセージループを自分で書く必要はありません。

furyfox
質問者

お礼

いつもご回答頂き、大変助かります。 CreateDialogIndirectというAPIははじめてききました。そういう方法もあるのですね。 ただ今回はCreateWindowを使って 自分でコントロールも配置していく方針で行こうと思います。 有難うございました。

furyfox
質問者

補足

ところでWinMainの中で // Window1表示 CreateWindow(... ShowWindow(... UpdateWindow( while(  メッセージループ ) // Window2表示 CreateWindow(... ShowWindow(... UpdateWindow( while(  メッセージループ ) ・ ・ ・ return 0; とするのは邪道でしょうか?

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

MFCでCDialog::DoModal()を使用するというのであれば、SDKではCreateDialog系を使ってダイアログを作成するのがちょうどよいでしょう。 その場合、メッセージループはWindowsのシステム内にあるので、自前でメッセージループを作成する必要はありません。 ちなみに、数行のメッセージ+Yes/No程度の選択肢でよいのであれば、さらに規模を小さくしてMessageBoxを使うということも考えられます。MessageBoxの場合はメッセージループだけでなくメッセージ処理もWindowsのシステム内にあるので、ダイアログ表示中の処理は何も書く必要がありません。

furyfox
質問者

お礼

ご回答有難うございます。 ちょっといい忘れてしまいましたが 出来ればリソースファイルが必要なダイアログは 避けたいのです。 メッセージボックスのようなウインドウを CreateWindowで作成する事はできないでしょうか?

関連するQ&A