ページ 11

MessageBoxが表示されない

Posted: 2016年3月27日(日) 23:40
by C++_student
はじめまして,質問よろしくお願いいたします.
DirectInputのお勉強をしていまして,例外が投げられたらメッセージボックスを表示するような
デバッグをしていました.
キーボードの方は特に問題なくできていたのですが,マウスのテストを描いた後にデバッグを
いたしますと,初期化の例外が発生しました.そこで発覚したのですが,
肝心のデバッグ用のメッセージボックスが,メッセージボックスが作成はされるもののALTを押すなどして
メッセージボックスを操作しないと,そのメッセージボックス(ウィンドウだかダイアログボックス)が
非表示のままになっているようでした.
コメントアウトで表示されるようになるまでコードを削ってみますと,
ヘッダdinput_test.hをインクルードすると再現するということが判明しました.
http://codepad.org/VM5gnv3C

さらに絞り込むとヘッダ内のwindow procedure(dinputProc / dinputProcAny)にあることが
判明し,wm_paintメッセージをユーザ定義で処理すると発生することが分かりましたが,
wm_paintをカスタマイズしつつmessageboxを表示させるようにする(共存させる)方法が
分かりません.
デバッグにメッセージボックスを使わない方法しかありませんか?

Re: MessageBoxが表示されない

Posted: 2016年3月28日(月) 05:05
by へにっくす
コンパイル環境が示されていないので使えるかは分かりませんが。
Visual Studioを使ってるなら以下が有効でしょう
http://www.nitoyon.com/vc/tutorial/debug/win32.htm

そもそも個人的にはMessageBox関数を使ってデバッグするのはおすすめしません。
いちいちストップするし、あなたの言われた現象ようにZオーダー問題(非表示になってるのではありません)で隠れてしまうことが多々あるからです。

Re: MessageBoxが表示されない

Posted: 2016年3月28日(月) 12:55
by C++_student
DebugOutputStringというのがあるんですね.
ですが今回の場合は例外が発生しているということから,やはりメッセージボックスを表示し,
okボタンを押したらプログラムが終了することの方が好ましい気がします.
(なので処理が止まっても問題ないです)

Zオーダー問題ということから,背面に存在しているようなのでその辺の文献をあさってみたいと思います.

Re: MessageBoxが表示されない

Posted: 2016年3月28日(月) 13:04
by C++_student
メッセージボックスのスタイルに MB_TOPMOST を追加することで解決しました