MessageBox について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ma

MessageBox について

#1

投稿記事 by Ma » 16年前

DXライブラリを使ってBCC Developer でゲーム開発をしているものです。
今回 MessageBox を使って、終了確認を行っていたのですが、どうやらフルスクリーンになると
表示できないようなのですが、改善方法はないでしょうか?

以下が、MessageBox に使ったコードです。
int flag=MessageBox(GetMainWindowHandle() ,TEXT("本当に終了しますか?") , TEXT("終了確認") , MB_YESNO | MB_ICONQUESTION | MB_TOPMOST);
if(flag==IDNO){// NO を選択した。
    //終了をキャンセル。
}	
else{// YES を選択した。
    //終了処理
}
この方法では、ウィンドウが最上面に表示されなかったりします。
たまに表示されたかと思って、「いいえ」を押してみると、
一瞬だけウィンドウのフォーカスがMessageBox にうつったせいか、
すぐにゲームには戻らず、一瞬だけデスクトップ画面にもどってまたゲームにもどります。
あたかも、Ctrl+Tab で一瞬だけ他のウィンドウにフォーカスした感じです。

他には、MessegeBox を移動したらメインウィンドウの画面が更新できないので、
画面にたくさんのMessegeBox がたぶった状態になったりします。
返り値を待っているからあたりまえでしょうが・・・


これらの問題点を解決する、他の方法や、改善する方法ありませんでしょうか?

ちなみに、ダイアログはほとんど初心者で、コピペ程度しかできません。
(この機会に学ぼうかとも思ってます。)

Justy

Re:MessageBox について

#2

投稿記事 by Justy » 16年前

 ライブラリの初期化をしたあとにでも SetUseGDIFlag(TRUE)とやってみたらどうなりますか?

Ma

Re:MessageBox について

#3

投稿記事 by Ma » 16年前

>Justy 様
とくに変化は見受けられませんでした。

*すいません訂正します。
最前面に表示できるようになりました。

ですが、戻り値を待っている間、ダイアログを移動すると、ダイアログの模様で背景が掻き消されていく問題。
また、二回目のダイアログ表示だと、なぜか最前面表示されなくなる問題ができました。
なぜ、一回目だけなのか分かりませんが・・・

SooA

Re:MessageBox について

#4

投稿記事 by SooA » 16年前

MessageBoxの問題解決ではありませんが、
私の場合はバックグラウンド処理を停止させたく
なかったので、終了用ループ処理を追加して
ダイアログ風のメニューを描画しています。

Ma

Re:MessageBox について

#5

投稿記事 by Ma » 16年前

>SooA
やっぱ自作ですかー。
ちょっとした手間を避けるためにと思ってたんですが、
やはり処理を続けるなら、単に描画するのがベストかもしれませんね。

Justy

Re:MessageBox について

#6

投稿記事 by Justy » 16年前


>また、二回目のダイアログ表示だと、なぜか最前面表示されなくなる問題ができました

 あ、毎回ダイアログを出す前後で呼ばないとだめだったかも。

ttp://www.play21.jp/board/formz.cgi?action=res&resno=25277&page=&lognum=79&id=dixq&rln=25304



>ダイアログを移動すると、ダイアログの模様で背景が掻き消されていく問題。

 それはどうしようもないですね。
 MessageBox()が戻ってこないと処理が先に進まないんで……。


 SooAさんのように自前で書くのがベストかも。

Ma

Re:MessageBox について

#7

投稿記事 by Ma » 16年前

以下、Justyさんがくださった過去ログからです。
>どうやらSetUseGDIFlag()はDxLib_Init()の後で使うべきだったようです。

う~ん、どうも上手くいかないですね。
いろいろと不都合がありそうなので、自前で作ることにしました。


ご協力ありがとうございました<(_ _)>

閉鎖

“C言語何でも質問掲示板” へ戻る