0

Windows7でGoogleChrome3.0.195.21のサイズを非常に小さい幅に変更すると(他のバージョンは試していません)、ウィンドウボタンがウィンドウからぶら下がっています。

ウィンドウサイズは拡張されず、オーバーハングはマウスに反応しません。

ウィンドウのサムネイルプレビューには、ウィンドウ内にあるボタンの一部のみが表示されます。Aero Peekプレビューには、すべてのボタンが表示されます。

オーバーハングはSpy++では表示されません(私が知る限り)。

それはどのように行われますか?

どうすればそのようなことができますか?(私はC#を記述しますが、C ++の回答も受け取ります)

編集:はっきりしない場合は、自分のプログラムでこのようなオーバーハングを作成する方法を尋ねています。

4

1 に答える 1

2

デスクトップ上のウィンドウのサイズを変更する場合、Windows は WM_GETMINMAXINFO メッセージに依存してサイズ制限を取得するため、Microsoft のガイドラインに従って、ウィンドウが引き続き使用可能になります。

[サイズ変更可能なウィンドウ] コンテンツが使用できなくなるサイズがある場合は、ウィンドウの最小サイズを設定する必要があります。サイズ変更可能なコントロールの場合、サイズ変更可能な要素の最小サイズを、リスト ビューの最小機能列幅などの最小機能サイズに設定します。

デフォルトでは、Windows はキャプション バーの高さを高さ、幅を約 100 ピクセル (最小/最大/閉じるボタン + 名前の数文字) に制限しています。この制約を取り除くには、WM_GETMAXINFO メッセージを自分で処理し、最小サイズを必要に応じて変更する必要があります。

C# コードの例は、ここから適応できます。

private const long WM_GETMINMAXINFO = 0x24;

public struct POINTAPI
{
    public int x;
        public int y;
}

public struct MINMAXINFO
{
    public POINTAPI ptReserved; 
    public POINTAPI ptMaxSize; 
    public POINTAPI ptMaxPosition;
    public POINTAPI ptMinTrackSize; 
    public POINTAPI ptMaxTrackSize;
}

protected override void WndProc(ref System.Windows.Forms.Message m )
{
    if (m.Msg == WM_GETMINMAXINFO)
    {
        MINMAXINFO mmi = (MINMAXINFO)m.GetLParam(typeof(MINMAXINFO));
        mmi.ptMinTrackSize.x = 0;
        mmi.ptMinTrackSize.y = 0;
        System.Runtime.InteropServices.Marshal.StructureToPtr(mmi, m.LParam, true);
    }

    base.WndProc(ref m);
}

そして(これを調査している間)同じ問題を扱う別のSOの質問を見つけました。WM_WINDOWPOSCHANGINGこれを Vista や C# で動作させるには、どうやらオーバーライドする必要があるようです。(私が見た別の例は Delphi にあり、後者のメッセージもオーバーライドする必要はありませんでした)。

于 2010-01-04T11:53:19.250 に答える