オーナーウインドウがアクティブにならないことについて。 メインウインドウにボタンを一つ貼り付け、そのボタンをクリックすると、モーダルダイアログが開くという単純なプログラムがあります。ここでモーダルを閉じるボタンなどで閉じると、モーダルウインドウは破棄され、メインウインドウが再びアクティブになります。いたって普通の挙動です。このときもし、モーダル上にもボタンがあり、そのボタンで更にウインドウが開くといった構造になっていたら、その動作を行った後モーダルを閉じると、メインウインドウはアクティブにならず、他のアプリのウインドウの下などに(もしそれらがあれば)隠れてしまいます。これを防ぐにはどうすれば良いでしょうか。 とりあえず、DialogBoxプロシージャ呼び出しの後に「SetForegroungWindow()」を書けば、見た目上はうまくアクティブになってくれます。ただしモーダルを開いてもそこで更にウインドウを開くことなく、何もせずにただ閉じれば普通にアクティブになってくれるので、その場合には全く無駄なことをやっていることになります。 以下にプログラムを書いておきます。(といってもメインウインドウのボタン・イベントでモーダルを開き、そのモーダルのボタン・イベントで更に何かウインドウを開くというだけのものです。ActiveBasicですが極めて単純なプログラムなので他の言語でもさほど変わらないものと思います。) ActiveBasic Ver.4.24 for Win 32bit============================================メイン・ウインドウのボタン・クリックイベント。Sub MainWnd_CommandButton1_Click() 'モーダル・ダイアログを開く。 DialogBox(hMainWnd, \u0026quot;ModalWnd\u0026quot;) '↓ここでこの命令を書かないと、「モーダルダイアログ上で '何か更にウインドウを開いた時に限り」、その戻りで 'メインウインドウはアクティブにならず、下に隠れる。 'SetForegroundWindow(hMainWnd) End Sub---------------------------------------------モーダル・ダイアログのボタン・クリックイベント。Sub ModalWnd_CommandButton1_Click() '何か更にウインドウを開く。 '(ここでは一例としてメッセージボックス。) MessageBox(hModalWnd, \u0026quot;Yes/No\u0026quot;, \u0026quot;YES/NO\u0026quot;, MB_YESNO) 'ダイアログを閉じる。 EndDialog(hModalWnd, 0)End Sub============================================= 要約すれば、オーナーウインドウにとって、「一段階下のウインドウを開いただけのときには、うまく戻ってこられるが、二段階下のウインドウが一度開かれると元には戻ってこられない」ということになるかと思います。 この現象の解決をお知りの方がおられましたら是非ご教授をお願いしたいと思います。