出自:
設定resizemode="noresize"可去掉最大化和最小化按鈕
但沒法再拖曳改變窗體大小
ws_clipsiblings: 0x04000000ws_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...