2014-02-27 3 views
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); 
} 

Любая помощь будет принята с благодарностью! Спасибо!

+0

Вы хотите полностью отключить изменение размера или ТОЛЬКО удалить кнопки? –

+0

Я пытаюсь скрыть/удалить все три кнопки в правом верхнем углу окна (свести к минимуму, максимизировать и закрыть). – Miguel

ответ

0

Это код, который я использовал для включения и выключения кнопки закрытия в winforms. Я понимаю, что это отличается от того, что вы хотите тремя способами. 0). Он касается только кнопки закрытия (хотя, если Оскар прав, это единственный, о котором вам нужно беспокоиться) 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 
0

Обратите внимание, что некоторые стили окон не могут быть изменены после создания окна, но я не знаю, относится ли это к этим флагам или нет ... Насколько я знаю, если ваша панель заголовка написана системой, у вас либо есть значок и кнопка закрытия или ни одна из них, потому что оба они управляются с помощью стиля окна WS_SYSMENU.

0

В свойствах формы, например в приложении WPF, вы можете скрывать только кнопки минимизации и мазимирования.

Существует свойство называется ResizeMode, и если вы положили в NORESIZE, это две кнопки будут скрыты. ;)

1

Вы можете установить WindowStyle недвижимость WPF window в XAML в None. т.е.

WindowStyle="None" 

Используя код, который вы можете сделать то же самое, как следует: -

WindowName.WindowStyle = WindowStyle.None; 

Он должен работать, чтобы скрыть все три кнопки.