10/11/13 19:14:16
DirectXでゲームを作ってます
外部ファイルで持たせてあるデータのロードに失敗した時に、
エラーメッセージを表示して強制終了したいのですが、
MessageBox()関数には引数として、hwndが必要です。
クラス設計を進めていくと、わざわざ全てのクラスのコンストラクタに
hwndを渡すのが煩わしいのですが、他の方法はないでしょうか?
hwndをグローバル変数で持たせる、という方法も思いついたのですが、
エラーメッセージのために、普通、そこまでするものでしょうか?
ちなみに、_ASSERT_EXPR()は、リリース時には動かないので、除外してください
747:デフォルトの名無しさん
10/11/13 19:50:19
例外を投げてUIを扱えるところまで戻ったところでcatchする
748:デフォルトの名無しさん
10/11/13 19:57:00
>>746
言わんとするところは分かるが根本的な設計が間違ってる
ウィンドウハンドルみたいなハード依存部分を
グローバルスコープで参照したり各クラスオブジェクトに渡すのは良くない
ハードに依存する部分としない部分はキッチリ分けないと再利用性が無くなる
あと、その言い方だとたぶん
各オブジェクトごとにファイルを読んでインスタンスを生成するような設計っぽいけど
それだと同じファイルを使うオブジェクトを複数生成するときに
オブジェクトの数だけ読み込みを行わなくならなくならないか?
やるべきことはデータロード部分と各クラスオブジェクトを分離すること
まずデータロードクラスなりを1つ作って
データ読み込みは全てコイツが行う
ウィンドウハンドルもこコイツだけが内部で知ってれば良くて
メッセージ表示等も全てコイツがやる
各クラスオブジェクトはこのデータロードクラスで
読み込んだデータを参照してインスタンスを生成し
それ自身はファイルの読み込みはしないようにする
749:デフォルトの名無しさん
10/11/13 19:59:00
なるほど!
750:デフォルトの名無しさん
10/11/13 20:11:08
>>748
便乗して質問してしまうが「データの参照」って具体的にどうやって書けばいいの?
751:デフォルトの名無しさん
10/11/13 20:17:36
>>746
コンストラクタとか関数の引数全てにhwnd渡すぐらいなら、
グローバル変数の方がいい
どうしても気なるなら、staticな変数にhwndを覚えるようなクラスを作って、
メッセージボックス表示をそのクラスで行なうとか
752:デフォルトの名無しさん
10/11/13 20:22:51
強制終了ならFatalExceptionとか作ってスローしてmainでキャッチすればいいじゃん
753:デフォルトの名無しさん
10/11/13 21:41:33
>>746
けっこうみんな悩んでるからここで聞いて解決する問題じゃないと思う