Udostępnij przez


Informacje o systemie Windows

W tym temacie opisano elementy programowania używane przez aplikacje do tworzenia i używania okien; zarządzanie relacjami między oknami; i rozmiar, przenoszenie i wyświetlanie okien.

Omówienie zawiera następujące tematy.

Okno pulpitu

Po uruchomieniu systemu automatycznie tworzy okno pulpitu. okno pulpitu to okno zdefiniowane przez system, które maluje tło ekranu i służy jako podstawa dla wszystkich okien wyświetlanych przez wszystkie aplikacje.

Okno pulpitu używa mapy bitowej do malowania tła ekranu. Wzorzec utworzony przez mapę bitową jest nazywany tapetą pulpitu . Domyślnie okno pulpitu używa mapy bitowej z pliku .bmp określonego w rejestrze jako tapety pulpitu.

Funkcja GetDesktopWindow zwraca uchwyt do okna pulpitu.

Aplikacja konfiguracji systemu, taka jak element Panelu sterowania, zmienia tapetę pulpitu przy użyciu funkcji SystemParametersInfo z parametrem wAction ustawionym na SPI_SETDESKWALLPAPER i parametrem lpvParam określającą nazwę pliku mapy bitowej. SystemParametersInfo następnie ładuje mapę bitową z określonego pliku, używa mapy bitowej do malowania tła ekranu i wprowadza nową nazwę pliku w rejestrze.

Okna aplikacji

Każda graficzna aplikacja oparta na systemie Windows tworzy co najmniej jedno okno nazywane głównym oknem , które służy jako podstawowy interfejs między użytkownikiem a aplikacją. Większość aplikacji tworzy również inne okna, bezpośrednio lub pośrednio, aby wykonywać zadania związane z głównym oknem. Każde okno odgrywa rolę w wyświetlaniu danych wyjściowych i odbieraniu danych wejściowych od użytkownika.

Po uruchomieniu aplikacji system kojarzy również przycisk paska zadań z aplikacją. Przycisk paska zadań zawiera ikonę i tytuł programu. Gdy aplikacja jest aktywna, jej przycisk paska zadań jest wyświetlany w stanie wciśniętym.

Okno aplikacji zawiera elementy, takie jak pasek tytułu, pasek menu, menu okna (wcześniej znane jako menu systemowe), przycisk minimalizuj, przycisk maksymalizuj, przycisk przywracania, przycisk zamknij, obramowanie rozmiaru, obszar klienta, poziomy pasek przewijania i pionowy pasek przewijania. Główne okno aplikacji zwykle zawiera wszystkie te składniki. Poniższa ilustracja przedstawia te składniki w typowym oknie głównym.

typowe okna

Obszar klienta

Obszar klienta jest częścią okna, w którym aplikacja wyświetla dane wyjściowe, takie jak tekst lub grafika. Na przykład aplikacja do publikowania komputerowego wyświetla bieżącą stronę dokumentu w obszarze roboczym. Aplikacja musi udostępnić funkcję nazywaną procedurą okna, aby przetworzyć dane wejściowe w oknie i wyświetlić dane wyjściowe w obszarze klienta. Aby uzyskać więcej informacji, zobacz Procedury okienne.

Obszar niekliencki

Pasek tytułu, pasek menu, menu okna, przyciski minimalizacji i maksymalizacji, obramowanie zmiany rozmiaru i paski przewijania nazywa się zbiorczo jako obszar nieklientowy okna. System zarządza większością aspektów obszaru nieklientnego; aplikacja zarządza wyglądem i zachowaniem obszaru klienta.

Pasek tytułu wyświetla ikonę zdefiniowaną przez aplikację i wiersz tekstu; zazwyczaj tekst określa nazwę aplikacji lub wskazuje cel okna. Aplikacja określa ikonę i tekst podczas tworzenia okna. Pasek tytułu umożliwia również użytkownikowi przenoszenie okna przy użyciu myszy lub innego urządzenia wskazującego.

Większość aplikacji zawiera pasek menu , który zawiera listę poleceń obsługiwanych przez aplikację. Elementy na pasku menu reprezentują główne kategorie poleceń. Kliknięcie elementu na pasku menu zwykle otwiera menu podręczne, którego elementy odpowiadają zadaniam w danej kategorii. Klikając polecenie, użytkownik kieruje aplikację do wykonania zadania.

Menu okna jest tworzone i zarządzane przez system. Zawiera on standardowy zestaw elementów menu, które po wybraniu przez użytkownika ustawiają rozmiar lub położenie okna, zamykają aplikację lub wykonują zadania. Aby uzyskać więcej informacji, zobacz Menu.

Przyciski w prawym górnym rogu mają wpływ na rozmiar i położenie okna. Po kliknięciu przycisku maksymalizujsystem powiększa okno do rozmiaru ekranu i umieszcza je tak, że obejmuje cały pulpit, z wyjątkiem paska zadań. W tym samym czasie system zastępuje przycisk Maksymalizuj przyciskiem przywracania. Po kliknięciu przycisku przywróćsystem przywraca okno do poprzedniego rozmiaru i położenia. Po kliknięciu przycisku zminimalizowaniasystem zmniejsza okno do rozmiaru przycisku znajdującego się na pasku zadań, umieszcza okno nad tym przyciskiem i pokazuje go w jego standardowym stanie. Aby przywrócić aplikację do poprzedniego rozmiaru i położenia, kliknij przycisk paska zadań. Po kliknięciu przycisku zamknij , aplikacja kończy działanie.

rozmiar obramowania to obszar wokół obwodu okna, który umożliwia użytkownikowi rozmiar okna przy użyciu myszy lub innego urządzenia wskazującego.

Poziomy pasek przewijania oraz pionowy pasek przewijania przekonwertują dane wejściowe z myszy lub klawiatury na wartości używane przez aplikację do przesuwania zawartości obszaru roboczego w poziomie lub pionie. Na przykład aplikacja do przetwarzania wyrazów, która wyświetla długi dokument, zazwyczaj udostępnia pionowy pasek przewijania, aby umożliwić użytkownikowi stronicowanie w górę i w dół dokumentu.

Kontrolki i okna dialogowe

Aplikacja może utworzyć kilka typów okien oprócz okna głównego, w tym kontrolek i okien dialogowych.

Kontrolka to okno używane przez aplikację do uzyskania określonej informacji od użytkownika, takie jak nazwa pliku do otwarcia lub żądany rozmiar punktu zaznaczenia tekstu. Aplikacje używają również kontrolek do uzyskiwania informacji potrzebnych do kontrolowania określonej funkcji aplikacji. Na przykład aplikacja do przetwarzania wyrazów zwykle udostępnia kontrolkę, aby umożliwić użytkownikowi włączanie i wyłączanie zawijania wyrazów. Aby uzyskać więcej informacji, zobacz Elementy sterujące systemu Windows.

Kontrolki są zawsze używane w połączeniu z innym oknem — zazwyczaj jest to okno dialogowe. Okno dialogowe to okno zawierające co najmniej jedną kontrolkę. Aplikacja używa okna dialogowego, aby wyświetlić użytkownikowi monit o podanie danych wejściowych potrzebnych do wykonania polecenia. Na przykład aplikacja zawierająca polecenie umożliwiające otwarcie pliku spowoduje wyświetlenie okna dialogowego zawierającego kontrolki, w których użytkownik określa ścieżkę i nazwę pliku. Okna dialogowe zwykle nie używają tego samego zestawu składników okna, co okno główne. Większość z nich ma pasek tytułu, menu okna, obramowanie (bez zmiany rozmiaru) i obszar klienta, ale zazwyczaj brakuje paska menu, przycisków minimalizowania i maksymalizowania oraz pasków przewijania. Aby uzyskać więcej informacji, zobacz okna dialogowe .

okno komunikatu to specjalne okno dialogowe z informacją, przestrogą lub ostrzeżeniem dla użytkownika. Na przykład pole komunikatu może poinformować użytkownika o problemie napotkanym przez aplikację podczas wykonywania zadania. Aby uzyskać więcej informacji, zobacz Pola komunikatów.

Atrybuty okna

Podczas tworzenia okna aplikacja musi podać następujące informacje. (Z wyjątkiem uchwytu okna, który funkcja tworzenia zwraca w celu jednoznacznego zidentyfikowania nowego okna).

Te atrybuty okna zostały opisane w poniższych sekcjach.

Nazwa klasy

Każde okno należy do klasy okien. Aplikacja musi zarejestrować klasę okien przed utworzeniem jakichkolwiek okien tej klasy. Klasa okien definiuje większość aspektów wyglądu i zachowania okna. Głównym składnikiem klasy okien jest procedura okna , funkcja, która odbiera i przetwarza wszystkie dane wejściowe i żądania wysyłane do okna. System udostępnia dane wejściowe i żądania w postaci komunikatów . Aby uzyskać więcej informacji, zobacz Klasy okien, Procedury okien, i Komunikaty i kolejki komunikatów.

Nazwa okna

Nazwa okna to ciąg tekstowy identyfikujący okno użytkownika. Główne okno, okno dialogowe lub okno komunikatu zazwyczaj wyświetla swoją nazwę na pasku tytułu, jeśli jest dostępna. Kontrolka może wyświetlać jego nazwę okna w zależności od klasy kontrolki. Na przykład przyciski, kontrolki edycji i kontrolki statyczne wyświetlają nazwy okien w prostokątze zajmowanym przez kontrolkę. Jednak kontrolki, takie jak pola listy i pola kombi, nie wyświetlają ich nazw okien.

Aby zmienić nazwę okna po utworzeniu okna, użyj funkcji SetWindowText . Ta funkcja używa funkcji GetWindowTextLength i funkcji GetWindowText w celu pobrania bieżącego ciągu nazwy okna z okna.

Styl okna

Każde okno ma co najmniej jeden styl okna. Styl okna to nazwana stała, która definiuje aspekt wyglądu i zachowania okna, który nie jest określony przez klasę okna. Aplikacja zwykle ustawia style okien podczas tworzenia okien. Można również ustawić style po utworzeniu okna przy użyciu funkcji SetWindowLong.

System i w pewnym stopniu procedura okna dla klasy interpretuje style okna.

Niektóre style okien mają zastosowanie do wszystkich okien, ale większość ma zastosowanie do okien określonych klas okien. Ogólne style okna są reprezentowane przez stałe rozpoczynające się od prefiksu WS_; Można je połączyć z operatorem OR w celu utworzenia różnych typów okien, w tym okien głównych, okien dialogowych i okien podrzędnych. Style okna specyficzne dla klasy definiują wygląd i zachowanie okien należących do wstępnie zdefiniowanych klas kontrolek. Na przykład klasa SCROLLBAR określa kontrolkę paska przewijania, ale style SBS_HORZ i SBS_VERT określają, czy jest tworzona kontrolka paska przewijania poziomego lub pionowego.

Listę stylów, które mogą być używane przez okna, można znaleźć w następujących tematach:

Styl okna rozszerzonego

Każde okno może opcjonalnie mieć co najmniej jeden rozszerzony styl okna. rozszerzony styl okna to nazwana stała, która definiuje aspekt wyglądu i zachowania okna, który nie jest określony przez klasę okna lub inne style okna. Aplikacja zwykle ustawia rozszerzone style okien podczas tworzenia okien. Można również ustawić style po utworzeniu okna przy użyciu funkcji SetWindowLong.

Aby uzyskać więcej informacji, zobacz CreateWindowEx.

Pozycja

Położenie okna jest definiowane jako współrzędne lewego górnego rogu. Współrzędne te, czasami nazywane współrzędnymi okna, zawsze odnoszą się do lewego górnego rogu ekranu lub, w przypadku okna podrzędnego, lewego górnego rogu obszaru klienta okna nadrzędnego. Na przykład okno najwyższego poziomu o współrzędnych (10 10 10) znajduje się 10 pikseli po prawej stronie lewego górnego rogu ekranu i 10 pikseli w dół od niego. Okno podrzędne o współrzędnych (10,10) znajduje się 10 pikseli na prawo od lewego górnego rogu obszaru klienta okna nadrzędnego i 10 pikseli poniżej.

Funkcja WindowFromPoint przechwytuje uchwyt do okna zajmującego określony punkt na ekranie. Podobnie funkcje ChildWindowFromPoint i ChildWindowFromPointEx pobierają uchwyt do okna podrzędnego zajmującego określony punkt w obszarze klienta okna nadrzędnego. Mimo że ChildWindowFromPointEx może ignorować niewidoczne, wyłączone i przezroczyste okna podrzędne, ChildWindowFromPoint nie może.

Rozmiar

Rozmiar okna (szerokość i wysokość) jest podawany w pikselach. Okno może mieć zerową szerokość lub wysokość. Jeśli aplikacja ustawia szerokość i wysokość okna na zero, system ustawia rozmiar na domyślny minimalny rozmiar okna. Aby odnaleźć domyślny minimalny rozmiar okna, aplikacja używa funkcji GetSystemMetrics z flagami SM_CXMIN i SM_CYMIN.

Aplikacja może wymagać utworzenia okna z obszarem klienta o określonym rozmiarze. Funkcje AdjustWindowRect i AdjustWindowRectEx obliczają wymagany rozmiar okna na podstawie żądanego rozmiaru obszaru klienta. Aplikacja może przekazać wynikowe wartości rozmiaru do funkcji CreateWindowEx.

Aplikacja może mieć rozmiar okna tak, aby był bardzo duży; jednak nie powinien mieć rozmiaru okna tak, aby był większy niż ekran. Przed ustawieniem rozmiaru okna aplikacja powinna sprawdzić szerokość i wysokość ekranu przy użyciu GetSystemMetrics z flagami SM_CXSCREEN i SM_CYSCREEN.

Uchwyt okna nadrzędnego lub właściciela

Okno może mieć nadrzędne okno. Okno mające okno nadrzędne nazywa się oknem podrzędnym . Okno nadrzędne dostarcza układ współrzędnych używany do pozycjonowania okna podrzędnego. Posiadanie okna nadrzędnego wpływa na aspekty wyglądu okna; na przykład okno podrzędne jest przycinane, aby żadna część okna podrzędnego nie mogła pojawić się poza obramowaniem okna nadrzędnego.

Okno, które nie ma elementu nadrzędnego lub którego element nadrzędny jest oknem pulpitu, nosi nazwę okna najwyższego poziomu . Aplikacja może użyć funkcji EnumWindows, aby uzyskać dojście do każdego okna najwyższego poziomu na ekranie. EnumWindows przekazuje dojście do każdego okna najwyższego poziomu, z kolei do funkcji wywołania zwrotnego zdefiniowanego przez aplikację, EnumWindowsProc.

Okno najwyższego poziomu może być właścicielem lub być własnością innego okna. Okno należące do zawsze pojawia się przed oknem właściciela, jest ukrywane, gdy okno właściciela jest zminimalizowane, i zostaje zniszczone, gdy okno właściciela zostanie zniszczone. Aby uzyskać więcej informacji, zobacz posiadane systemy Windows.

Okno podrzędne może mieć identyfikator okna podrzędnego , który jest unikatową wartością zdefiniowaną przez aplikację i skojarzoną z oknem podrzędnym. Identyfikatory okienek podrzędnych są szczególnie przydatne w aplikacjach tworzących wiele okienek podrzędnych. Podczas tworzenia okna podrzędnego aplikacja określa identyfikator okna podrzędnego. Po utworzeniu okna aplikacja może zmienić identyfikator okna przy użyciu funkcji SetWindowLong lub pobrać identyfikator przy użyciu funkcji GetWindowLong.

Każde okno, z wyjątkiem okna podrzędnego, może mieć menu. Aplikacja może zawierać menu, podając uchwyt menu podczas rejestrowania klasy okna lub podczas tworzenia okna.

Obsługa wystąpienia aplikacji

Każda aplikacja ma skojarzony uchwyt wystąpienia. System udostępnia uchwyt instancji aplikacji przy jej uruchomieniu. Ponieważ może uruchamiać wiele kopii tej samej aplikacji, system używa obsługi wystąpień wewnętrznie w celu odróżnienia jednego wystąpienia aplikacji od innego. Aplikacja musi określić uchwyt wystąpienia w wielu różnych oknach, w tym te, które tworzą okna.

Data utworzenia

Każde okno może mieć skojarzone z nim dane tworzenia zdefiniowane przez aplikację. Gdy okno jest po raz pierwszy tworzone, system przekazuje wskaźnik do danych do procedury okna, które jest tworzone. Procedura okna używa danych do inicjowania zmiennych zdefiniowanych przez aplikację.

Uchwyt okna

Po utworzeniu okna funkcja tworzenia zwraca uchwyt okna , który jednoznacznie identyfikuje okno. Uchwyt okna ma typ danych HWND; aplikacja musi używać tego typu podczas deklarowania zmiennej, która zawiera uchwyt okna. Aplikacja używa tego uchwytu w innych funkcjach do kierowania działań na okno.

Aplikacja może użyć funkcji FindWindow, aby sprawdzić, czy w systemie istnieje okno o określonej nazwie klasy lub nazwie okna. Jeśli takie okno istnieje, FindWindow zwraca uchwyt do okna. Aby ograniczyć wyszukiwanie do okien podrzędnych określonej aplikacji, użyj funkcji FindWindowEx.

Funkcja IsWindow określa, czy uchwyt okna identyfikuje prawidłowe, już istniejące okno. Istnieją specjalne stałe, które mogą zastąpić uchwyt okna w niektórych funkcjach. Na przykład aplikacja może używać HWND_BROADCAST w funkcjiSendMessage i SendMessageTimeout lub HWND_DESKTOP w funkcji MapWindowPoints.

Tworzenie okna

Aby utworzyć okna aplikacji, użyj funkcji CreateWindow createWindow lub CreateWindowEx. Musisz podać informacje wymagane do zdefiniowania atrybutów okna. CreateWindowEx ma parametr dwExStyle, którego nie ma CreateWindow; w przeciwnym razie funkcje są identyczne. W rzeczywistości CreateWindow po prostu wywołuje CreateWindowEx z parametrem dwExStyle ustawionym na zero. Z tego powodu pozostała część tego przeglądu dotyczy tylko CreateWindowEx.

Ta sekcja zawiera następujące tematy:

Notatka

Istnieją dodatkowe funkcje do tworzenia okien specjalnych, takich jak okna dialogowe i okna komunikatów. Aby uzyskać więcej informacji, zobacz DialogBox, CreateDialogi MessageBox.

 

Tworzenie okna głównego

Każda aplikacja oparta na systemie Windows musi mieć WinMain jako funkcję punktu wejścia. WinMain wykonuje wiele zadań, w tym rejestrowanie klasy okien dla okna głównego i tworzenie okna głównego. winMain rejestruje główną klasę okien, wywołując funkcję RegisterClass i tworzy okno główne, wywołując funkcję CreateWindowEx.

Funkcja WinMain może również ograniczyć aplikację do pojedynczej instancji. Utwórz nazwany mutex przy użyciu funkcji CreateMutex. Jeśli GetLastError zwróci ERROR_ALREADY_EXISTS, istnieje inne wystąpienie twojej aplikacji (które utworzyło mutex), a ty powinieneś zakończyć WinMain.

System nie wyświetla automatycznie okna głównego po jego utworzeniu; Zamiast tego aplikacja musi używać funkcji ShowWindow, aby wyświetlić okno główne. Po utworzeniu okna głównego funkcji WinMain aplikacji wywołuje ShowWindow, przekazując dwa parametry: uchwyt do okna głównego i flagę określającą, czy okno główne powinno być zminimalizowane, czy zmaksymalizowane po pierwszym wyświetleniu. Zwykle flagę można ustawić na dowolną z stałych rozpoczynających się od prefiksu SW_. Jednak po wywołaniu ShowWindow w celu wyświetlenia okna głównego aplikacji należy ustawić flagę na SW_SHOWDEFAULT. Ta flaga informuje system o wyświetlaniu okna zgodnie z zaleceniami programu, który uruchomił aplikację.

Jeśli klasa okien została zarejestrowana w wersji Unicode RegisterClass, okno odbiera tylko komunikaty Unicode. Aby określić, czy okno używa zestawu znaków Unicode, wywołaj IsWindowUnicode.

Window-Creation Komunikaty

Podczas tworzenia dowolnego okna system wysyła komunikaty do procedury dla okna. System wysyła komunikat WM_NCCREATE po utworzeniu obszaru nieklienckowego okna i komunikatu WM_CREATE po utworzeniu obszaru klienta. Procedura okna odbiera oba komunikaty, zanim system wyświetli okno. Oba komunikaty zawierają wskaźnik do struktury CREATESTRUCT zawierającej wszystkie informacje określone w funkcji CreateWindowEx. Zazwyczaj procedura okna wykonuje zadania inicjowania po otrzymaniu tych komunikatów.

Podczas tworzenia okna podrzędnego system wysyła komunikat WM_PARENTNOTIFY do okna nadrzędnego po wysłaniu komunikatów WM_NCCREATE i WM_CREATE. Wysyła również inne komunikaty podczas tworzenia okna. Liczba i kolejność tych komunikatów zależą od klasy i stylu okna oraz od funkcji użytej do utworzenia okna. Te komunikaty są opisane w innych tematach w tym pliku pomocy.

Aplikacje wielowątkowe

Aplikacja oparta na systemie Windows może mieć wiele wątków wykonywania, a każdy wątek może tworzyć okna. Wątek tworzący okno musi zawierać kod procedury okna.

Aplikacja może użyć funkcji EnumThreadWindows, aby wyliczyć okna utworzone przez określony wątek. Ta funkcja kolejno przekazuje uchwyt do każdego okna wątku do funkcji wywołania zwrotnego zdefiniowanej przez aplikację, EnumThreadWndProc.

Funkcja GetWindowThreadProcessId zwraca identyfikator wątku, który utworzył określone okno.

Aby ustawić stan show okna utworzonego przez inny wątek, użyj funkcji ShowWindowAsync.