9

Delphi フォームを最大化すると、幅と高さの値は対応する GetSystemMetrics SM_CXSCREEN と SM_CYSCREEN よりも 8 ピクセル大きくなりますか?

例えば:

画面を右クリックしてプロパティを取得すると、画面解像度は 1680 X 1050 になります。これらは、GetSystemMetrics(SM_CXSCREEN) および GetSystemMetrics(SM_CYSCREEN) から返される値と同じです。

Delphi アプリケーションでフォームを最大化すると、幅が 1688、高さが 1058 になります。8 ピクセルの違いがあります。この違いの原因は何ですか?

4

2 に答える 2

21

最大化されたウィンドウが最初に実装されたとき、設計者はサイズ変更の境界線を削除したいと考えていました。それらを削除するのではなく、代わりに、それらの境界線を画面の端を超えて表示することにしました。したがって、最大化されたウィンドウのかなり驚くべきウィンドウの長方形です。

この実装の決定は、マルチモニター システムの出現で問題になりました。その時までに、この動作に依存するアプリケーションがあったため、Windows チームは互換性のために動作を維持することにしました。これは、最大化されたウィンドウが隣接する画面に漏れることを意味していました。やがて、ウィンドウ マネージャーはその漏れを抑えることができる機能を獲得しました。

Raymond Chenは、いつものように詳細をカバーする記事を持っています。

于 2013-02-02T23:19:32.000 に答える
2

WM_GETMINMAXINFOをキャッチする簡単なプログラムを書きました。このメッセージにより、実際の最大化が行われる前に、最大化されたウィンドウの位置とサイズを変更できます。システムによって提供されるデフォルト値は次のとおりです。

Position.x: -8
Position.y: -8
Size.x: 1456 (= 8 + width of screen + 8)
Size.y: 916 (= 8 + height of screen + 8)

画面の解像度は 1440x900 です。

Windows は、最大化後にウィンドウを配置し、クライアント領域が利用可能なスペースをほとんどカバーし、ウィンドウのクロムが画面領域の外側に隠れるように見えます。

于 2013-02-02T23:23:19.057 に答える