個人事業主の方必見!確定申告のお悩み解決

Window1表示

Window1閉じる

Window2表示

Window2閉じる

Window3表示

というふうに遷移していくWindowを表示する場合、普通どういうコードになるのでしょうか?

たとえばMFCのCDialogならDoModalのようにボタンが押されるまでとまるので
ソース的に
nRet1 = Dlg1.DoModal();
nRet2 = Dlg2.DoModal();
nRet3 = Dlg3.DoModal();
といった感じになると思いますが、普通のWindowSDKプログラミングだと
メッセージループがあると思います。
その場合、どういうコーディングが一般的でしょうか?

A 回答 (3件)

メッセージループの場所が変わっても何の問題もありません。



例えアプリケーション内で1ヶ所にまとめてあったとしても、ダイアログやメッセージボックスを出すたびにWindowsが内部的に持つメッセージループが実行されるので同じことです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/07 11:45

リソースファイルを使わないとなると、やり方は2種類しかありません。



1つはCreateWindows等でウィンドウを自前で作成し、その中にコントロールも自前で配置する方法。メッセージループは自分で作成する必要があります。と言っても、大変なのはメッセージループではなくコントロールの自前配置の部分だと思いますが。

もう1つは「ダイアログリソース」互換のバイナリデータ(ダイアログテンプレート)をメモリ上に用意しておいて、CreateDialogIndirectを使う方法です。こちらは通常のダイアログボックス相当なので、メッセージループを自分で書く必要はありません。

この回答への補足

ところでWinMainの中で

// Window1表示
CreateWindow(...
ShowWindow(...
UpdateWindow(
while(
 メッセージループ
)

// Window2表示
CreateWindow(...
ShowWindow(...
UpdateWindow(
while(
 メッセージループ
)



return 0;

とするのは邪道でしょうか?

補足日時:2005/07/06 20:55
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/06 19:49

MFCでCDialog::DoModal()を使用するというのであれば、SDKではCreateDialog系を使ってダイアログを作成するのがちょうどよいでしょう。



その場合、メッセージループはWindowsのシステム内にあるので、自前でメッセージループを作成する必要はありません。

ちなみに、数行のメッセージ+Yes/No程度の選択肢でよいのであれば、さらに規模を小さくしてMessageBoxを使うということも考えられます。MessageBoxの場合はメッセージループだけでなくメッセージ処理もWindowsのシステム内にあるので、ダイアログ表示中の処理は何も書く必要がありません。
    • good
    • 0
この回答へのお礼

ご回答有難うございます。
ちょっといい忘れてしまいましたが
出来ればリソースファイルが必要なダイアログは
避けたいのです。

メッセージボックスのようなウインドウを
CreateWindowで作成する事はできないでしょうか?

お礼日時:2005/07/06 17:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング