Vista ツールバーはどのようにして境界線のパディング設定を無視したり、認識したりできるのでしょうか?

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

質問

古いバージョンの 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 に「「境界線のパディング」設定を無視する」と指示することは可能でしょうか。私の境界線のパディングは 0 インチですか?
  2. そうでない場合、アプリケーションは境界線のパディングの設定をどのように判断して、ウィンドウの高さを 2 倍にすることができるのでしょうか?
  3. どちらの質問でも、同じ実行可能ファイルを XP、Vista、Win2003 などで動作させるにはどうすればよいでしょうか?
役に立ちましたか?

解決

一つの選択肢は、WS_THICKFRAMEで始まる、別のウィンドウスタイルでプレイすることです。

パディングを把握するためにGetClientRectとGetWindowRectを使って試してみて、他から1を引いています。

他のヒント

個別に注意すべきもう一つは、あなたがすでにGetSystemMetricsまたは類似を使用して、アカウントにウィンドウの境界線を取るしようとしている場合は、あなたがにコンパイルサブシステムは国境があなたのクライアント領域に影響を与えるどのように違いをもたらすことである。

。サブシステムによって、私はあなたが/subsystem、またはVisual Studioで対応する設定をリンクする際にその意味する.exeフラグであると考えています。

〜宝石

まあ、私は並べ替えた場合、それを考え出しました。私の場合は、問題の原因は、私は必要はありませんでしたWS_THICKFRAMEの使用CreateWindowEx()を呼び出し、でした。この設定は、ツールバー内に垂直に全てを中心に、以前に使用しました。私はWinXPの(クラシック表示)の下で以前の推測、WS_THICKFRAMEは、予想通り、すべてのサイズにパディングの3つの画素を追加します。

このように、私は、そのオプションを削除し、3つのピクセル下と右にすべてを移動するためのコードを変更しました。今ツールバーはWinXPのとVistaで同じに見えると私は迷惑や不要(このツールバー用)余分なパディングを持っていません。

これは、一般的な事件を解決しませんが、私の答えは、このに実行する他の人を助けるかもしれないので、私は私が私の解決策を投稿しようと思いました。私は、これは他の誰かに役立ちます願っています。

scroll top