ページ 11

MessageBox について

Posted: 2009年4月26日(日) 21:32
by Ma
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 がたぶった状態になったりします。
返り値を待っているからあたりまえでしょうが・・・


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

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

Re:MessageBox について

Posted: 2009年4月27日(月) 00:27
by Justy
 ライブラリの初期化をしたあとにでも SetUseGDIFlag(TRUE)とやってみたらどうなりますか?

Re:MessageBox について

Posted: 2009年4月27日(月) 04:58
by Ma
>Justy 様
とくに変化は見受けられませんでした。

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

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

Re:MessageBox について

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

Re:MessageBox について

Posted: 2009年4月27日(月) 07:58
by Ma
>SooA
やっぱ自作ですかー。
ちょっとした手間を避けるためにと思ってたんですが、
やはり処理を続けるなら、単に描画するのがベストかもしれませんね。

Re:MessageBox について

Posted: 2009年4月27日(月) 10:03
by Justy

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

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

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



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

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


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

Re:MessageBox について

Posted: 2009年4月27日(月) 12:10
by Ma
以下、Justyさんがくださった過去ログからです。
>どうやらSetUseGDIFlag()はDxLib_Init()の後で使うべきだったようです。

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


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