说明:俺是WPF初学者,WPF里面的文字,都是我的学习笔记,里面借鉴了前辈们的方法。
主题:WPF 去掉最大化最小化的方法
基础知识: WPF中默认窗口框架的外观,主要取决于Icon、Title、WindowsStyle、ResizeMode等属性。
Icon 指定窗口的图标;
Title 指定窗口的标题;
WindowStyle 指定窗口样式,有4个取值:
None,仅工作区可见 - 该标题栏和边框不会显示。;(当ResizeMode属性为NoResize时,仅剩下窗口核心。)
SingleBorderWindow,具有单个边框的窗口。 这是默认值;
ThreeDBorderWindow,具有3-D边框的窗口;
ToolWindow | 固定工具窗口。 |
ResizeMode 是指定大小调节样式,有4个取值:
NoResize,不可调节,同时没有最大最小按钮;
CanMinimize,不可调节。但可以最小化;(此时最大化按钮不可用)
CanResize,可调节【默认】;
CanResizeWithGrid,可根据网格调节;(窗口右下脚显示可调节网格)
方式 ①、设置窗体的ResizeMode属性 ,CanMinimize值只显示最小化 和 关闭 按钮。
方式 ②、引用JimFire的方法 原文地址 :http://blog.csdn.net/JimFire/article/details/6696905
[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);
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)
{
int GWL_STYLE = -16;
int WS_MAXIMIZEBOX = 0x00010000;
int WS_MINIMIZEBOX = 0x00020000;
int SWP_NOSIZE = 0x0001;
int SWP_NOMOVE = 0x0002;
int SWP_FRAMECHANGED = 0x0020;
IntPtr handle = new WindowInteropHelper( this).Handle;
int nStyle = GetWindowLong(handle, GWL_STYLE);
if (isDisable)
{
nStyle &= ~(WS_MAXIMIZEBOX);
nStyle &= ~(WS_MINIMIZEBOX);
}
else
{
nStyle |= WS_MAXIMIZEBOX;
nStyle |= WS_MINIMIZEBOX;
}
SetWindowLong(handle, GWL_STYLE, nStyle);
SetWindowPos(handle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_FRAMECHANGED);
}
private void Window_Loaded( object sender, RoutedEventArgs e)
{
DisableMaxmizebox( true);
}
{
int GWL_STYLE = -16;
int WS_MAXIMIZEBOX = 0x00010000;
int WS_MINIMIZEBOX = 0x00020000;
int SWP_NOSIZE = 0x0001;
int SWP_NOMOVE = 0x0002;
int SWP_FRAMECHANGED = 0x0020;
IntPtr handle = new WindowInteropHelper( this).Handle;
int nStyle = GetWindowLong(handle, GWL_STYLE);
if (isDisable)
{
nStyle &= ~(WS_MAXIMIZEBOX);
nStyle &= ~(WS_MINIMIZEBOX);
}
else
{
nStyle |= WS_MAXIMIZEBOX;
nStyle |= WS_MINIMIZEBOX;
}
SetWindowLong(handle, GWL_STYLE, nStyle);
SetWindowPos(handle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_FRAMECHANGED);
}
private void Window_Loaded( object sender, RoutedEventArgs e)
{
DisableMaxmizebox( true);
}