禁用WPF窗體的最大化按鈕

2021-06-16 14:41:41 字數 1671 閱讀 4288

出自:

設定resizemode="noresize"可去掉最大化和最小化按鈕 

但沒法再拖曳改變窗體大小

ws_clipsiblings:     0x04000000

ws_clipchildren: 0x02000000

ws_visible: 0x10000000

ws_disabled: 0x08000000

ws_minimize: 0x20000000

ws_maximize: 0x01000000

ws_caption: 0x00c00000

ws_border: 0x00800000

ws_dlgframe: 0x00400000

ws_vscroll: 0x00200000

ws_hscroll: 0x00100000

ws_sysmenu: 0x00080000

ws_thickframe: 0x00040000

ws_minimizebox: 0x00020000

ws_maximizebox: 0x00010000

最近做的軟體中要求禁止最大化按鈕,並且要求可以改變窗體的size。

調查後發現wpf窗體沒有設定最大化按鈕狀態的屬性。

改變windowstyle屬性可以達到禁用最大化按鈕的目的,但是同時也不能更改窗體的size了。

最後想到了使用windows api改變按鈕狀態的方法。

使用getwindowlong可以得到當前按鈕的狀態。使用setwindowlong可以設定按鈕的狀態。

使用setwindowpos進行介面的更新。

下面是這幾個api的宣告。

[dllimport("user32.dll", entrypoint = "getwindowlong")]

public static extern int getwindowlong(intptr hwnd, int nindex);

[dllimport("user32.dll", entrypoint = "setwindowlong")]

public static extern int setwindowlong(intptr hmenu, int nindex, int dwnewlong);

[dllimport("user32.dll")]

private static extern int setwindowpos(intptr hwnd, intptr hwndinsertafter, int x, int y, int cx, int cy, int uflags);

進行禁用後必須進行介面的重新整理,否則禁用狀態不會立即顯示在介面上。

private void disablemaxmizebox(bool isdisable)

else

setwindowlong(handle, gwl_style, nstyle);

setwindowpos(handle, intptr.zero, 0, 0, 0, 0, swp_nosize | swp_nomove | swp_framechanged);

}這個函式可以通過引數確定是否禁用。

WPF窗體禁用最大化按鈕

禁用wpf窗體的最大化按鈕可以使用windows api改變按鈕狀態的方法實現。使用getwindowlong可以得到當前按鈕的狀態。使用setwindowlong可以設定按鈕的狀態。使用setwindowpos進行介面的更新。下面是這幾個api的宣告。dllimport user32.dll en...

禁用WPF窗體的最大化按鈕

出自 設定resizemode noresize 可去掉最大化和最小化按鈕 但沒法再拖曳改變窗體大小 ws clipsiblings 0x04000000 ws clipchildren 0x02000000 ws visible 0x10000000 ws disabled 0x08000000 ...

WPF窗體去掉最大化,最小化按鈕。

dllimport user32.dll entrypoint getwindowlong public static extern int getwindowlong intptr hwnd,int nindex dllimport user32.dll entrypoint setwindowl...