禁用WPF窗体的最大化按钮
2009-04-13 15:23
405 查看
最近做的软件中要求禁止最大化按钮,并且要求可以改变窗体的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)
{
int GWL_STYLE = -16;
int WS_MAXIMIZEBOX = 0x00010000;
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);
}
else
{
nStyle |= WS_MAXIMIZEBOX;
}
SetWindowLong(handle, GWL_STYLE, nStyle);
SetWindowPos(handle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_FRAMECHANGED);
}
这个函数可以通过参数确定是否禁用。
调查后发现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)
{
int GWL_STYLE = -16;
int WS_MAXIMIZEBOX = 0x00010000;
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);
}
else
{
nStyle |= WS_MAXIMIZEBOX;
}
SetWindowLong(handle, GWL_STYLE, nStyle);
SetWindowPos(handle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_FRAMECHANGED);
}
这个函数可以通过参数确定是否禁用。
相关文章推荐
- WPF窗体最大化、最小化、关闭按钮的隐藏和禁用
- WPF窗体禁用最大化按钮
- 禁用WPF窗体的最大化按钮
- 禁用WPF窗体的最大化按钮
- 【WPF】Window窗体禁用最大化/最小化按钮
- WPF中让窗体不显示最大化,最小化,关闭按钮
- (转)WPF中让窗体不显示最大化,最小化,关闭按钮
- C#禁用窗体最大化按钮
- Delphi窗体中禁用最大化按钮
- winform 窗体关闭按钮禁用、不显示最大化、最小化、关闭按钮 分类: WinForm 2014-12-22 16:09 82人阅读 评论(0) 收藏
- Delphi窗体中禁用最大化按钮
- winform 窗体关闭按钮禁用、不显示最大化、最小化、关闭按钮
- C#禁用窗体最大化按钮
- WPF窗体去掉最大化,最小化按钮。
- WPF窗体关闭/放大/缩小按钮禁用、隐藏的实现
- WPF窗体去掉最大化,最小化按钮
- 关于winForm窗体禁用关闭按钮的使用方法及禁用最大化、最小化窗口
- [WPF]自由配置窗体最大化、最小化按钮是否可用,窗口大小不可改变
- Windows Forms中禁用窗体的关闭按钮
- delphi窗体去掉最大化,最小化,关闭按钮