2016-08-16 13 views
8

Mam bardzo prostą klasę, która dziedziczy po System.Windows.Forms.Form i usuwa styl okna WS_CAPTION. Działa doskonale w systemie Windows XP & 7. W systemie Windows 10 pasek tytułowy jest nadal narysowany i kończy się wyglądać paskudnie, gdy używasz niestandardowego kontrolera paska tytułowego.Usuń pasek tytułu z formularza Windows (styl Windows 10)

Wiem, że istnieje kilka sposobów osiągnięcia tego rodzaju wyglądu, ale wybrałem to z wielu powodów. Nie interesują mnie alternatywne metody - to nie jest zamiarem mojego pytania tutaj.

Moje pytanie brzmi: jaka jest przyczyna takiej różnicy między sposobem renderowania w systemie Windows 10 a Windows 7? Różnica nie jest jedynie stylistyczna. Wygląda na to, że pasek tytułu wciąż jest renderowany w pewnym stopniu, mimo że flaga WS_CAPTION została usunięta.

class BorderlessForm : System.Windows.Forms.Form 
{ 
    protected override System.Windows.Forms.CreateParams CreateParams 
    { 
     get 
     { 
      var _CreateParams = base.CreateParams; 
      _CreateParams.Style &= ~0x00C00000; // remove WS_CAPTION 
      return _CreateParams; 
     } 
    } 
} 

Okna 7 ekranu (pożądany wygląd zgodny z opisem MSDN)

enter image description here

okien 10 ekranu (niepożądany wygląd niezgodne z opisem MSDN)

enter image description here

+0

używasz WinForm, który jest przestarzałą technologią prezentacji, która prawdopodobnie nie będzie działać w przewidywalny sposób w późniejszych wersjach systemu Windows. Użyj WPF. –

+8

Pokaż dokumentację MSDN dotyczącą przestarzałych formularzy, które okażę jako odpowiedź ... –

+0

Nie powiedziałem, że jest przestarzałe. Powiedziałem tylko, że jest nieaktualny. To jest dziedzictwo. –

Odpowiedz

3

Co obserwujesz to nie pasek tytułu, ale rozmiar obramowania.

Moje pytanie brzmi: jaka jest przyczyna takiej różnicy między sposobem renderowania w systemie Windows 10 a Windows 7?

Przyczyną jest inna implementacja wyglądu i sposobu działania w różnych wersjach systemu Windows.

Jeśli jesteś zainteresowany, jak pozbyć się granicy rozmiarów, nawet na Windows 10: Usuń flagę WS_THICKFRAME.

Alternatywnie (a może nawet bardziej korzystnie) możesz zmienić swój formularz na FormBorderStyle na inną wartość. Sprawdź, co działa najlepiej dla Ciebie.

Jednak nie ma niczego, co precyzyjnie definiuje ogólną granicę formularza. To zależy od wyglądu i stylu (motywu). Technicznie nie można oczekiwać, że granica formularza nie będzie się różnić w zależności od implementacji. Możesz to zapewnić tylko poprzez testowanie.

Powiązane problemy