タイトル : SetParentとメッセージボックス 投稿日 : 2009/11/18(Wed) 21:09 投稿者 : ほしの
こんにちは、いつも拝見させていただいております。 大変参考にさせていただいております。 メッセージボックスの挙動なのですが、普通は呼び出すと、モーダルになって呼び出し 元の画面がロックされますよね。 ところが、A.exeとB.exeを作成し、A.exeを額縁のようにして、B.exeをWinAPIの SetParent()で貼り付けます。 そうするとあら不思議。 B.exeから呼び出したメッセージボックスがモードレスになってしまいます。 こうなると、B.exeの画面がメッセージ表示中も触れてしまうので、いろいろと不都合 が出てしまいます・・・ ちなみに、ActiveXExeです。 組み込みのMsgBoxの不具合かと思い、B.exeのグローバルモジュールに、MsgBoxと同じ 名前の関数を作り、中でWinAPIのMessageBox()を呼び出すようにしました。 第1引数にWinAPIのGetActiveWindow()でとってきたウインドウハンドルをセットした ところ、うまくいったかのように見えましたが、A.exeがアクティブになっている状態で 全く別のウインドウ(Excelとか)を重ねてしまうと、GetActiveWindow()の返り値が0に なってしまい、メッセージボックスがモードレスになってしまいました。 MessageBox()のスタイルにMB_SYSTEMMODALやMB_TASKMODALを指定しても、モーダルに なる気配がありませんでした。 この方法で対応するとした場合は、第1引数に適切なウインドウハンドルを設定してや らないといけなそうな感じなのですが、何か有効な取り方はありますでしょうか? ちなみに、B.exeはサブフォームも展開したりするので、サブフォームからメッセージを 出した場合はサブフォームのウインドウハンドルをセットする必要があるかと思います。 B.exeで定義したMsgBox()に引数を追加して呼び出し元のウインドウハンドルを渡して やれれば問題は解決するのかもしれませんが、B.exeが大量にあるので、対応しきれない 状態なのです; なんとかWinAPIで動的に呼び元のウインドウハンドルが取れればいいのですが・・・ よろしくお願いいたします。 |