« タスクトレイアイコンが登録できない | メイン | アラートウィンドウへフォーカスを移さない »

2005年03月29日

mixi Alert 開発日誌:: Zオーダーのみを変える

    

アラートウィンドウ表示時はTCustomForm::Showをコールしているが、この場合フォーカスも移動するようだ。
ヘルプによると、『Show メソッドを使うと,フォームの Visible プロパティを true に設定し,そのフォームを画面の最前面に表示できます。』 と書かれている。
フォーカスについては書かれていないけど、SetForegroundWindow をコールしているのだろうか?
SetForegroundWindowは、『定されたウィンドウを作成したスレッドをフォアグラウンドにし、そのウィンドウをアクティブにします。』 と説明されているので、フォーカスも移動しそう。

関数をカテゴリから探すウィンドウの操作 一覧表示 を見て、Zオーダーのみ変更する適当なAPIを探す。
BringWindowToTop が良さそうかと思ったけど、MSDNによるとアクティブにするとある。
むぅ・・・だめかぁ。
でも、MSDNの解説には、『この関数は、Z オーダーを変更するという点では SetWindowPos 関数とよく似ていますが、ウィンドウをトップレベルウィンドウに変更することはしません。』 とも書かれている。
つまり、SetWindowPos でも、Z オーダーを変更できるようだ。
見ると、『SWP_NOACTIVATE : ウィンドウをアクティブ化しません。 』 と言うちょうど良いフラグがある。
これを使えばうまくいきそうだ。



投稿者 Takenori : 2005年03月29日 21:50




comments powered by Disqus
Total : Today : Yesterday : なかのひと