アプリケーションが最大化されたときに自動非表示タスクバーが表示されない

StackOverflow https://stackoverflow.com/questions/137005

  •  02-07-2019
  •  | 
  •  

質問

私のアプリケーションは、すべてのウィンドウの境界線と装飾を描画します。アプリケーションウィンドウが最大化されている場合を除き、自動非表示に設定されているWindowsタスクバーで正常に動作します。タスクバーは「ロールアップ」しません。アプリケーションが最大化されていない場合、画面の一番下までサイズ変更されていても、正常に動作します。ディスプレイ全体を占めるようにウィンドウのサイズを変更するだけで(最大化されているかのように)正常に機能します。

役に立ちましたか?

解決

問題が見つかりました。私のアプリケーションはWM_GETMINMAXINFOメッセージを処理しており、パラメーターMINMAXINFOレコードの値をオーバーライドしていました。レコードにあった値は、画面のピクセル解像度の7(境界線幅)だけ膨らみました。これは、最大化すると、ウィンドウの境界線が画面の可視部分を超えてプッシュされるため、意味があります。また、ptMaxPosition(ウィンドウの原点が最大化されたときに設定されるポイント)を-7、-7に設定します。私のアプリケーションはそれを0,0に設定し、最大の高さと幅を正確に画面の解像度サイズ(膨らませない)に設定していました。なぜこれが行われたかはわかりません。それは前任者によって書かれました。そのコードをコメントアウトし、MINMAXINFO構造を変更しない場合、自動非表示が機能します。

理由については、完全にはわかりません。 「自動非表示」ポップアップを検出することは可能です。タスクバーは、WM_NCMOUSEMOVEではなく、WM_MOUSEMOVEメッセージを処理するメカニズムにフックされています。アプリケーションが画面の下部に境界線を最大化するように最大化すると、WM_NCMOUSEMOVEイベントが生成されます。 MINMAXINFOをそのままにしておくと、WM_MOUSEMOVEを生成していたでしょう。

他のヒント

これは、タスクバーのプロパティで「タスクバーを他のウィンドウの上に表示する」がチェックされているかどうかに依存します。チェックされている場合、タスクバーが表示されます。

しかし、あなたのニーズに合わせてエンドユーザーのマシン上でこの設定をプログラムで変更しようとしないでください。アプリは、デプロイ先の環境に適合する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top