我有一个WPF应用程序,可以拆除窗户,我希望能够隐藏最小化按钮(在撕下) - 我不想隐藏最大化,只有最小化。 This所以问题显示了如何隐藏BOTH,但是当我改为代码只是为了隐藏最小化它显示但是被禁用。
这只会禁用按钮:
internal static void HideMinimizeButtons(this Window window)
{
var hwnd = new WindowInteropHelper(window).Handle;
var currentStyle = GetWindowLong(hwnd, GWL_STYLE);
SetWindowLong(hwnd, GWL_STYLE, (currentStyle & ~WS_MINIMIZEBOX));
}
我怎样才能让它隐藏最小化按钮?
答案 0 :(得分:3)
AFAIK“最小”和“最大”按钮可以作为一组隐藏,但不能单独隐藏。
即使在Windows窗体时代,MimimizeBox属性也是如此。
this.MinimizeBox = false; // still visible, but disabled
this.MaximizeBox = false; // add this line and both buttons disappear
系统菜单是另一回事。可以使用此代码隐藏菜单项。
<强> CODE 强>
public partial class MainWindow : Window {
private const int MF_BYPOSITION = 0x400;
[DllImport("User32")]
private static extern int RemoveMenu(IntPtr hMenu, int position, int flags);
[DllImport("User32")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool revert);
[DllImport("User32")]
private static extern int GetMenuItemCount(IntPtr hWnd);
private enum SystemMenu : int {
Restore,
Move,
Size,
Minimize,
Maximize
}
public MainWindow() {
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e) {
WindowInteropHelper helper = new WindowInteropHelper(this);
IntPtr menuPtr = GetSystemMenu(helper.Handle, false);
int menuItemCount = GetMenuItemCount(menuPtr);
RemoveMenu(menuPtr, (int)SystemMenu.Minimize, MF_BYPOSITION);
}
}
截屏之前
截屏后
使用
SetWindowLong(hwnd, GWL_STYLE, (currentStyle & ~WS_MINIMIZEBOX));
禁用菜单和按钮。
这可以防止用户最小化撕下窗口,但是没有你想要的外观。
我见过用于解决这个问题的替换标题栏,但要做好正确的工作还有很多工作。