1

我试图隐藏窗口顶部的最小化、最大化和关闭按钮,但仍然显示我的图标。

我尝试了几种不同的方法,但无法保留图标。这是我正在使用的代码:

private const int GWL_STYLE = -16;
private const int WS_SYSMENU = 0x00080000;

[DllImport("user32.dll")]
private extern static int SetWindowLong(IntPtr hwnd, int index, int value);
[DllImport("user32.dll")]
private extern static int GetWindowLong(IntPtr hwnd, int index);

public Window()
{
    SourceInitialized += MainWindow_SourceInitialized;
    InitializeComponent();

    Uri iconUri = new Uri("pack://application:,,,/Icon1.ico", UriKind.RelativeOrAbsolute);
    this.Icon = BitmapFrame.Create(iconUri);
}

void MainWindow_SourceInitialized(object sender, EventArgs e)
{
    WindowInteropHelper wih = new WindowInteropHelper(this);
    int style = GetWindowLong(wih.Handle, GWL_STYLE);
    SetWindowLong(wih.Handle, GWL_STYLE, style & ~WS_SYSMENU);
}

任何帮助将不胜感激!谢谢!

4

4 回答 4

1

您可以将in的WindowStyle属性设置为 None。IEWPF windowXAML

WindowStyle="None"

使用代码,您可以执行以下相同的操作:-

WindowName.WindowStyle = WindowStyle.None;

它必须能够隐藏所有三个按钮。

于 2014-02-27T07:26:36.547 回答
0

这是我用来启用和禁用 winforms 中的关闭按钮的代码。我意识到这在 3 种方式上与您想要的不同 1)它只处理关闭按钮(尽管如果 Oscar 是正确的,它是您唯一需要担心的)2)它不会隐藏它,它只是禁用/ 将其变灰(尽管您可以更改参数以完全隐藏它) 3)它适用于 winforms,而不是 wpf

尽管存在这些差异,但查看代码可能会帮助您找出缺少的内容。如果您确实弄清楚了,我会对您发布您的解决方案感兴趣:)

#region Enable / Disable Close Button
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);

[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);

private const int SC_CLOSE      = 0xF060;
private const int MF_BYCOMMAND  = 0x0000;

private const int MF_ENABLED    = 0x0000;
private const int MF_GRAYED     = 0x0001;

protected void DisableCloseButton()
{
    try
    {
        EnableMenuItem(GetSystemMenu(this.Handle, false), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
        this.CloseButtonIsDisabled = true;
    }
    catch{}
}
protected void EnableCloseButton()
{
    try
    {
        EnableMenuItem(GetSystemMenu(this.Handle, false), SC_CLOSE, MF_BYCOMMAND | MF_ENABLED);
        this.CloseButtonIsDisabled = false;
    }
    catch{}
}
protected override void OnSizeChanged(EventArgs e)
{
    if (this.CloseButtonIsDisabled)
        this.DisableCloseButton();
    base.OnSizeChanged(e);
}

#endregion
于 2014-02-27T20:51:48.027 回答
0

在表单属性中,例如在 WPF 应用程序中,您只能隐藏最小化和最大化按钮。

有一个属性叫做ResizeMode,如果你把NoResize,这两个按钮将被隐藏。;)

于 2014-02-27T06:06:12.610 回答
0

请注意,某些窗口样式在创建窗口后无法更改,但我不知道这是否适用于这些标志...据我所知,如果您的标题栏是由系统绘制的,您要么同时拥有图标和关闭按钮或没有这些按钮,因为它们都由WS_SYSMENU窗口样式控制。

于 2014-02-27T04:32:43.690 回答