1

古いバージョンの Windows で開発されたツールバーは、ウィンドウの新しい境界パディングにより、Vista ではほとんど切断されています。デフォルトの境界パディング 4 では、ツールバーのすべてが 4 ピクセル下と右に押し出され、すべてが下側と右側から 4 ピクセル切り取られます。水平方向の寸法はあまり気にしませんが、垂直方向に見ると、アプリケーションが表示可能なコンテンツの 8 ピクセルを失うことになります。

「ツールバー」とは、次のように作成されたウィンドウを意味します。

APPBARDATA  AppBarData;
AppBarData.hWnd = CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_TOPMOST, MAIN_WNDCLASS,
                                 "", WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN,
                                 0, 0, 400, TOOLBAR_HEIGHT, NULL, NULL,
                                 AppInstance, NULL);
// more initialization  ....
SHAppBarMessage(ABM_NEW, &AppBarData);

境界パディングは、一見すると Vista にとって新しい構成項目であるため、XP と Vista の両方で実行されるアプリケーションはどのようにこれを処理できますか? 私の質問は次のとおりです。

  1. ツールバーが Vista に「'border padding' 設定を無視します。私の境界パディングは 0 です」と伝えることは可能ですか?
  2. そうでない場合、アプリケーションはどのようにして境界パディングが設定されているかを判断し、ウィンドウをその 2 倍の高さにすることができるのでしょうか?
  3. 両方の質問に対して、同じ実行可能ファイルを XP、Vista、Win2003 などで動作させるにはどうすればよいですか?
4

3 に答える 3

1

1 つのオプションは、WS_THICKFRAME から始めて、さまざまなウィンドウ スタイルを試すことです。

パディングを把握するには、GetClientRect と GetWindowRect を使用して、一方を他方から差し引きます。

于 2009-07-09T03:13:02.437 に答える
1

個別に注意すべきもう 1 つのことは、使用または同様の方法で既にウィンドウの境界を考慮しようとしている場合GetSystemMetrics、コンパイル先のサブシステムによって、境界がクライアント領域に与える影響が異なるということです。

objectmix のリンクは、これを説明しようとしています。サブシステムによって、それらが意味するのは、/subsystemリンクするときのフラグ.exe、またはVisual Studioの対応する設定だと思います。

〜宝石

于 2009-07-09T03:25:55.643 に答える