0

ボーダレスWPFウィンドウで問題が発生しています。具体的には、ウィンドウのタスクバーの上で最大化し、-7のマージンで最大化し、ウィンドウを画面を超えて各方向に7ピクセルずつ最大化します。

これは、ウィンドウのMaximizedBoundsプロパティを設定することで、winformsで簡単に解決できますが、WPFにはこのプロパティがありません。

WndProcを介して最大化メッセージを傍受し、サイズ/位置を手動で設定してこの問題を解決しようとしましたが、RestoreRegionを最大化されたサイズ/位置に上書きし、ウィンドウを復元する機能を削除するという問題がありました。

そのため、PInvokeを使用してウィンドウのMaximizedBoundsを設定できる可能性があると思いました。

このページは、Win32SetWindowPlacementで実行できることを意味します...WINDOWPLACEMENTと呼ばれる構造を取ります。

    [Serializable]
    [StructLayout(LayoutKind.Sequential)]
    public struct WINDOWPLACEMENT
    {
        public int length;
        public int flags;
        public int showCmd;
        public POINT minPosition;
        public POINT maxPosition;
        public RECT normalPosition;
    } 

Rectanleとフラグを設定して、MaximizedBoundプロパティ用であることを指定する必要があると思いますが、これの例をオンラインで見つけることができず、見つけたフラグのいずれもこれを達成するようには見えません。私は間違った木を吠えていますか?もしそうなら、私が見落としたMaximizedBound(または同様のもの)を指定する他の方法はありますか?

4

1 に答える 1

0

P / Invokeルートを進む前に、このようなことを試してみます-WM_SETMINMAXINFO私が知っているメッセージはないので、偽のデータを処理して返すには、おそらくWinProcをオーバーライドする必要がありますWM_GETMINMAXINFO....しかしとにかく、最初にこれを試して、それがあなたのために働くかどうか見てください:

public class ConstrainedWindow : Window
{
    public ConstrainedWindow()
    {
        this.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
        this.MaxWidth = SystemParameters.MaximizedPrimaryScreenWidth;
    }

}
于 2012-11-17T02:54:48.613 に答える