1. ホーム
  2. wpf

[解決済み] サイズ変更可能なウィンドウから最小化ボタンと最大化ボタンを削除するには?

2023-03-19 02:41:55

質問

WPFでは、リサイズはできるが最大化・最小化ボタンがないウィンドウを作成する機能がありません。私は、サイズ変更可能なダイアログ ボックスを持つことができるように、そのようなウィンドウを作ることができるようにしたいと思っています。

解決策が pinvoke の使用を意味することは承知していますが、何をどのように呼び出すのかがわかりません。pinvoke.net を検索しても、私が必要とするものとして目に飛び込んでくるものはありませんでした。 CanMinimizeCanMaximize プロパティをそのウィンドウに追加します。

どなたか、これを行う方法について、コード (C# が望ましい) を示していただけませんか。

どのように解決するのですか?

MSDNフォーラムで見つけたコードを拝借して、Windowクラスに以下のような拡張メソッドを作ってみました。

internal static class WindowExtensions
{
    // from winuser.h
    private const int GWL_STYLE      = -16,
                      WS_MAXIMIZEBOX = 0x10000,
                      WS_MINIMIZEBOX = 0x20000;

    [DllImport("user32.dll")]
    extern private static int GetWindowLong(IntPtr hwnd, int index);

    [DllImport("user32.dll")]
    extern private static int SetWindowLong(IntPtr hwnd, int index, int value);

    internal static void HideMinimizeAndMaximizeButtons(this Window window)
    {
        IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(window).Handle;
        var currentStyle = GetWindowLong(hwnd, GWL_STYLE);

        SetWindowLong(hwnd, GWL_STYLE, (currentStyle & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX));
    }
}

覚えておくべき唯一の他のことは、何らかの理由でこれがウィンドウのコンストラクタから動作しないことです。私はこれをコンストラクタにチャックすることでそれを回避しました。

this.SourceInitialized += (x, y) =>
{
    this.HideMinimizeAndMaximizeButtons();
};

これが役に立つといいのですが