Dlaczego to okno ma kwadratowe rogi?

24

W systemie Windows 7 z motywem Aero okno Preferencje Notepad ++ ma kwadratowe rogi, brak ikony menu systemowego, przycisk zamykania i ciemniejszą 1pxramkę. To okno ma również AlwaysOnTopatrybut.

notatnik ++
(Zmieniłem rozmiar okna, aby dopasować szerokość 640px.)

Co ciekawe, możesz skopiować ten styl do innych okien za pomocą AutoHotkey . Wydaje się więc, że nie ma w tym żadnych brudnych sztuczek. Jednak nie sądzę, że widziałem ten styl okna gdzie indziej.

Czy używanie tego stylu jest potępiane przez Microsoft? Czy ten typ okna ma nazwę?


Dla ciekawskich: Normal vs „Square”

normalna   kalkulator

iglvzx
źródło
Myślę (ale nie jestem pewien), że platforma .NET domyślnie daje ramkę z zaokrąglonymi narożnikami i nikt tak naprawdę nie ma ochoty jej zmieniać.
soandos
Ponieważ Apple ma patent na zaokrąglone rogi.
Chloe,

Odpowiedzi:

37

Nazywa się to oknem narzędzia (paska) . Wszystkie okna o WS_EX_TOOLWINDOWrozszerzonym stylu będą renderowane bez menu systemowego lub minimalizacji / maksymalizacji pól i małego paska tytułu. W systemie Windows XP i nowszych (obsługujących motywy) okna narzędzi są zwykle renderowane bez zaokrąglonych rogów (przynajmniej z domyślnymi motywami).

Ten styl jest zwykle używany w przypadku pasków narzędzi (rysunek 1). Możesz to zobaczyć, przeciągając pasek narzędzi z programu, który umożliwia zmianę rozmieszczenia pasków narzędzi. Zauważ, że staje się oknem, które wygląda jak to, o którym mowa. Eksplorator Windows używa go również w przypadku pasków biurkowych (rysunek 2), które są w zasadzie takie same. Możesz je zobaczyć, przeciągając folder na jedną z krawędzi ekranu, a następnie przeciągając wynikowy pasek narzędzi / pasek na biurko na pulpit.

Oczywiście niektóre programy używają tego stylu do innych celów, często jako sposób na stworzenie modalnego, tymczasowego okna dialogowego, które jest potomkiem programu głównego.

Uwaga: ma to kilka efektów (pierwsze dwa są zwykle przyczyną niestandardowego użycia):

  • Okno / okno dialogowe z tym stylem nie wyświetla przycisku na pasku zadań
  • Zapobiega Alt+ Tabbing do okna dialogowego
  • Zapobiega również przechwytywaniu Alt+ PrtScrprzez okno dialogowe; całe okno programu nadrzędnego jest przechwytywane.

Rysunek 1: Okno paska narzędzi MSPaint

wprowadź opis zdjęcia tutaj

Rysunek 2: Pasek na biurko Eksploratora Windows

wprowadź opis zdjęcia tutaj

Synetech
źródło
Aha! To ma sens. :)
iglvzx
Alt+ PrintScreenprzechwytuje tylko okno dialogowe w Windows 7 z oknem dialogowym Preferencje Notepad ++.
Bob
17

Szczegółowo określa nazwę tego stylu okna i opcje dostępne w .NET; zobacz doskonałą odpowiedź @ Synetech na pierwotne przeznaczenie tego stylu okna, powody, dla których można go użyć w takim oknie dialogowym i implementację w niezarządzanych programach Windows, takich jak Notepad ++.


Okno ma kwadratowe rogi i wygląda tak, ponieważ jeden z projektantów / programistów Notepad ++ zdecydował się użyć określonego stylu okna. Synetech szczegółowo opisuje zalety tego stylu okna.

W .NET / Visual Studio jest to ustawione we FormBorderStylewłaściwości System.Windows.Forms.Formklasy. W szczególności jest to FixedToolWindow. Możliwe wartości są w System.Windows.Forms.FormBorderStylewyliczeniu.

W ToolWindowów w .NET z wszystkich wartości domyślnej pracy trochę inaczej niż zwykły WS_EX_TOOLWINDOWw Windows API, choć wyglądają tak samo. Z badań, I ustalili, że nie pojawiają się na pasku zadań, a oni nie pojawiają się na Alt+ Tabprzełącznik zadań, chyba że nieruchomość forma ShowInTaskbarjest ustawiona false. ShowInTaskbarwpływa na widoczność zarówno na pasku zadań, jak i Alt+ Tabdla ToolWindows, ale tylko dla innych.

Tymczasem możliwe jest również usunięcie przycisków ikona / minimalizuj / przywróć / maksymalizuj z bardziej popularnych stylów okien, chociaż wydaje się, że nie można ich dodać do ToolWindows. Możliwe jest również ukrycie normalnych okien na pasku zadań.

Jedyną zaletą funkcjonalną WS_EX_TOOLWINDOW, o ile mogę stwierdzić, jest to, że okno nie pojawia się w Alt+ Tab.


Dołączyłem kilka zrzutów ekranu porównujących style okien .NET. Nie są one bezpośrednio używane przez Notepad ++ ani inne niezarządzane programy, ale nazwane przez Microsoft, więc ...

Możliwe wartości FormBorderStyle:

Pierwszy obraz to zrzut ekranu uruchomionego programu z włączonym Aero, drugi z widoku projektanta Visual Studio (bez Aero).
Kliknij obrazy dla wersji w pełnym rozmiarze.
Opisy pochodzą z artykułu MSDN na temat FormBorderStylewyliczenia.

  • None

    Bez granic.

Screenshot_Aero Screenshot_NonAero

  • FixedSingle

    Stała, jednowierszowa granica.

Screenshot_Aero Screenshot_NonAero

  • Fixed3D

    Stała, trójwymiarowa granica.

Screenshot_Aero Screenshot_NonAero

  • FixedDialog

    Gruba, stała granica w stylu okna dialogowego.

Screenshot_Aero Screenshot_NonAero

  • Sizable (domyślna)

    Granica o zmiennym rozmiarze.

Screenshot_Aero Screenshot_NonAero

  • FixedToolWindow

    Obramowanie okna narzędzia, którego nie można zmienić rozmiaru. Okno narzędzia nie pojawia się na pasku zadań ani w oknie, które pojawia się, gdy użytkownik naciśnie ALT+ TAB. Chociaż formularze, które określają FixedToolWindowzazwyczaj, nie są wyświetlane na pasku zadań, należy również upewnić się, że ShowInTaskbarwłaściwość jest ustawiona na false, ponieważ jej wartością domyślną jest true.

Screenshot_Aero Screenshot_NonAero

  • SizableToolWindow

    Ramka okna narzędzia o zmiennym rozmiarze. Okno narzędzia nie pojawia się na pasku zadań ani w oknie, które pojawia się, gdy użytkownik naciśnie ALT+ TAB.

Screenshot_Aero Screenshot_NonAero

Kok
źródło
Tak! o tym mówiliśmy.
avirk
Nie ma to nic wspólnego z kodem zarządzanym / niezarządzanym lub rodzimym / .NET. Jest to po prostu kwestia tego, jak system Windows stylizuje okna za pomocą tego WS_EX_TOOLWINDOWstylu. .NET po prostu aliasy FixedToolWindowdo WS_EX_TOOLWINDOWi SizableToolWindowdo WS_EX_TOOLWINDOW|WS_THICKFRAME. Bez obrazy, ale ta odpowiedź tak naprawdę nie odpowiada na pytanie ani nie wyjaśnia zadanego zachowania, jest to po prostu lista / zasób różnych stylów okien używanych w .NET.
Synetech,
@ Synetech Zdaję sobie sprawę, że nie ma to nic wspólnego z tym, czy kod jest zarządzany, czy nie. Po prostu pomyślałem, że podam nazwę zastosowań .NET i innych dostępnych opcji wraz ze zrzutami ekranowymi różnic. Does this type of window have a name?Odpowiada tak wiele, przynajmniej z perspektywy programisty .NET. I wyjaśnienie? Ponieważ programista miał ochotę go użyć. Wymieniłeś potencjalnie pożądane efekty. O to chodzi. Bez względu na to, czy jest to zalecane, czy potępione przez stwardnienie rozsiane, nie mam pojęcia. Osobiście uważam, że wykonałeś wspaniałą pracę, tłumacząc to.
Bob
Po to są zmiany.
Synetech,
Co to jest @ Synetech?
Bob