常に最前面表示のタスクバーが一時的に最背面に表示されてしまう

[戻る]
ナナン 2009/12/27(日) 23:54:14
XP VS2005 MFCです。

タスクバーが常に最前面設定で且つ、任意のウィンドウ(エクスプローラなど何でも可)の
一部がタスクバーの後ろに隠れている状況とします。

ダイアログを作成し(モーダル/モードレスは問わない)、
同ダイアログを、MoveWindow(0,0,画面全体領域.幅, 画面全体領域.高さ)
などで画面全体に表示した際、タスクバーは常に最前面設定しているにも関わらず、
最背面に表示されるようになり、タスクバーに隠れていたウィンドウについても
表示されるようになってしまいます(状態A)

タスクバーをクリックするなどすると、再描画がかかるのか、
再びタスクバーが最前面に表示されます。

状態Aで::UpdateWindow(<タスクバーハンドル>)としても変化はありません。

また、画面下部にタスクバーがあることを前提とした場合、
ダイアログに対しMoveWindow(0,0,画面全体領域.幅, (面全体領域.高さ -1) )
のように、タスクバーがから若干ダイアログが外れるようにすると、
この現象はおきず、タスクバーの最前面オーダーは保たれたままになります。

なぜこのような現象が起きるのでしょうか?

また、この現象を回避
(ダイアログを画面全体表示にした際にも、タスクバーは常に最前面に表示される)
するにはどのようにすればよいでしょうか?

銀の皿 2010/01/20(水) 10:58:36
もう見ていないかもしれませんが。

おそらくナナンさんが仰る「画面全体領域」は「デスクトップサイズ」の事で
たしか「デスクトップサイズ」にはタスクバーの高さ(場合により幅)が関係無く
自分で計算する必要があったんじゃないかと思います。
一切確認を取っていないのでハズしているかもしれません。

また、該当ウィンドウの「最大化」では仕様を満足する事は出来ないのでしょうか?


ちなみにMFC(だけ?)で、タイトルバーの無いウィンドウを「最大化」した時は
「最大化」で無く「全画面表示」になってしまう様です。
「全画面表示」の際は、まさに画面全てを使用するモードなので
タスクバーが後ろに下がる、自動的に隠れるようにしているタスクバーが出てこない
といった現象は仕様であるとも言えると思います。
勿論VCのバージョンにもよるでしょうが。
上記の話は何一つ確証の無い話なので、世間話とでもしておいてください。

以上です。

古いスレッドには追加発言できません。