DialogBox()の親に指定するウィンドウについて – プログラミング – Home

DialogBox()の親に指定するウ...
 
通知
すべてクリア

DialogBox()の親に指定するウィンドウについて


初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

初歩的名質問だと思いますがよろしくお願いします。
MFC未使用のプロジェクトです。

DialogBoxやMessageBoxの引数の親ウィンドウハンドル(hParent)にはどんな値を指定すればよい
のでしょうか?
この際のダイアログはポップアップタイプです(通常)

例えばメインウィンドウ(A)の上に子ウィンドウ(B)が乗っていて、子ウィンドウ内のボタン
(C)を押した際に、ダイアログ作成される場合その親には、ABCどのウィンドウを指定するのが
適切なのでしょうか?

また、MessageBoxにはNULLを指定したりするのもたまに見かけますが、メインウィンドウや他の
ウィンドウを親にしたのとやはり動作がなにか違うのでしょうか?

よろしくお願いします。


引用解決済
トピックタグ
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

MessageBox()のヘルプによると、

> ダイアログボックスが表示されている場合にメッセージボックスを作成
> するときは、hWnd パラメータにダイアログボックスのハンドルを指定
> してください。hWnd パラメータで、ダイアログボックス内のコントロ
> ールなどの子ウィンドウを指定するべきではありません。

とあるので、オーナーウィンドウにはトップレベルのウィンドウを指定
すべきでしょう。
すなわち(A)を指定します。

また、MessageBox()のオーナーにNULLを指定した場合は、オーナーを
持たないので、アプリケーションのウィンドウとは独立したウィンドウ
になります。
つまり、メッセージボックスが表示されている間でも他のウィンドウを
操作することができます。

ただし、処理はあくまでモーダルであり、メッセージボックスが表示
されている間は、メインのメッセージループではなく、メッセージ
ボックスのメッセージループが回ることになります。


返信引用
初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

kerryさんどうもです。

> すなわち(A)を指定します。
なるほど、最初に作成したウィンドウですか。

現在の自分のプロジェクトだと、ボタンを押した処理部分から最初に作成したウィンドウにアクセス
するのが大変だったのですが、調べてたらこんなのを見つけました。
GetAncestor( hWnd, GA_ROOT )
いいのか悪いのかわかりませんが、とりあえず最初のウィンドウが取得できてるっぽいので使いたい
と思います。

ありがとうございました。

また、MessageBoxにNullを指定した場合の動作の件に関してもなんとなくわかった気がします。
一応プロジェクト全体のエラー表示に
MessageBox( NULL, xxxxxエラーです, ErrorBox, MB_OK );
みたいなのを使っていて不安があったのですが、あんまり問題ないようですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました