ダイアログベースのアプリで、GUI非表示で起動したアプリを
あるタイミングで表示(メインダイアログ)したいのですが方法がわかりません。
ご教授おねがいできないでしょうか?
メインダイアログのOnInitDialog() 内で以下のメソッドでGUIの非表示を実装していま
す。
ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);
SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_HIDEWINDOW);
これを、あるタイミングでGUI表示させたいのですが方法が方法がわかりません。
詳細を簡単に書くと、
常駐アプリ(タスクトレイ常駐)が定期的に上記のexeを呼びます。
exeは簡単なファイルスキャンを行います。
設定によっては、GUI表示でスキャンを実行するのですが、別設定でスキャン実行時は
GUI非表示(サイレントモード)で動作し、スキャン結果のみを上記のようにGUI表示を行
いたいと思っています。
よろしくお願いいたします。
申し訳ありません。開発環境を記述を忘れました。
VisualStudio2008
MFCでダイアログベースのアプリになります。
非表示状態ということですが、本当に非表示になっていますか。
> SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_HIDEWINDOW);
これだと、サイズもゼロになっているようですが。
Win32APIだと、WM_INITDIALOGで非表示にはできないはずですが、
MFCには詳しくないのでよく分かりません。
Spy++でWS_VISIBLEが付いていないかどうか観察してみてください。
>> SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_HIDEWINDOW);
>これだと、サイズもゼロになっているようですが。
ShowWindows(SW_HIDE);
ですよね。
> Win32APIだと、WM_INITDIALOGで非表示にはできないはずですが、
> MFCには詳しくないのでよく分かりません。
同じですね。
僕の場合、OnTimer内でフラグを使ってトグルで表示/非表示させますね。
> これを、あるタイミングでGUI表示させたいのですが方法が方法がわかりません。
わからないのはタイミングですか? 表示させる方法です?
表示させる方法ならばITOさんが書いている通りShowWindows関数でしょう。
タイミングならば、
> 常駐アプリ(タスクトレイ常駐)が定期的に上記のexeを呼びます。
「呼ぶ」という操作が何をやっているか不明ですが、他のアプリケーションに通知する
ならば PostMessage を使用することになるのではないでしょうか。
つまり常駐側が必要に応じてPostMessageを発行して、表示側のアプリでそのメッセージ
のハンドラでShowWindows(SW_SHOW)としてあげればいいと思います。
PostMessageで送るメッセージIDはシステム内でユニークである必要があるので、
RegisterWindowMessage関数を使用して決定する必要があります。
スキャンが完了したら
WM_APP にメッセージ送って
そこでダイアログ表示はどうでしょう?