Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Toto téma popisuje programovací prvky, které aplikace používají k vytváření a používání oken; správa vztahů mezi okny; a velikost, přesunutí a zobrazení oken.
Přehled obsahuje následující témata.
- Okno plochy
- Okna aplikace
- ovládací prvky a dialogová okna
- atributy okna
- vytváření oken
Okenní plocha
Když spustíte systém, automaticky se vytvoří okno plochy. Okno plochy je systémově definované okno, které maluje pozadí obrazovky a slouží jako základ pro všechna okna zobrazená všemi aplikacemi.
V okně plochy se k vykreslení pozadí obrazovky používá rastrový obrázek. Vzor vytvořený rastrovým obrázkem se nazývá tapeta na plochu. Ve výchozím nastavení se v okně plochy používá rastrový obrázek ze souboru .bmp zadaného v registru jako tapeta na plochu.
Funkce GetDesktopWindow vrátí popisovač okna plochy.
Aplikace konfigurace systému, jako je například položka Ovládací panely, změní plochu tapety pomocí funkce SystemParametersInfo s parametrem wAction nastaveným na SPI_SETDESKWALLPAPER a parametrem lpvParam určujícím název rastrového souboru. SystemParametersInfo pak načte rastrový obrázek ze zadaného souboru, použije rastrový obrázek k vykreslení pozadí obrazovky a zadá nový název souboru v registru.
Aplikační okna
Každá grafická aplikace založená na systému Windows vytvoří alespoň jedno okno, označované jako hlavní okno, které slouží jako primární rozhraní mezi uživatelem a aplikací. Většina aplikací také vytváří další okna, ať už přímo nebo nepřímo, k provádění úloh souvisejících s hlavním oknem. Každé okno hraje roli při zobrazení výstupu a příjmu vstupu od uživatele.
Když spustíte aplikaci, systém také přidruží tlačítko hlavního panelu k aplikaci. Tlačítko hlavního panelu obsahuje ikonu a název programu. Když je aplikace aktivní, zobrazí se tlačítko hlavního panelu ve stisknutém stavu.
Okno aplikace obsahuje prvky, jako je záhlaví, řádek nabídek, nabídka okna (dříve označovaná jako systémová nabídka), tlačítko minimalizovat, tlačítko maximalizovat, tlačítko pro obnovení, tlačítko zavřít, ohraničení velikosti, oblast klienta, vodorovný posuvník a svislý posuvník. Hlavní okno aplikace obvykle obsahuje všechny tyto komponenty. Následující obrázek znázorňuje tyto komponenty v typickém hlavním okně.
Klientská oblast
Klientská oblast je součástí okna, kde aplikace zobrazuje výstup, například text nebo grafiku. Například desktopová aplikace pro publikování zobrazí aktuální stránku dokumentu v klientské oblasti. Aplikace musí poskytnout funkci, která se nazývá procedura okna, pro zpracování vstupu do okna a zobrazení výstupu v klientské oblasti. Další informace naleznete v tématu Procedury okna.
Nezákaznická oblast
Záhlaví, nabídková lišta, nabídka okna, tlačítka pro minimalizaci a maximalizaci, rám pro změnu velikosti a posuvné lišty se souhrnně označují jako neklientská oblast okna. Systém spravuje většinu aspektů oblasti, která není klientem; aplikace spravuje vzhled a chování jeho klientské oblasti.
Záhlaví zobrazí ikonu definovanou aplikací a řádek textu; text obvykle určuje název aplikace nebo označuje účel okna. Aplikace při vytváření okna určuje ikonu a text. Záhlaví také umožňuje uživateli přesunout okno pomocí myši nebo jiného polohovacího zařízení.
Většina aplikací obsahuje řádek nabídek se seznamem příkazů podporovaných aplikací. Položky na řádku nabídek představují hlavní kategorie příkazů. Po kliknutí na položku na nabídkové liště se obvykle otevře vyskakovací nabídka, jejíž položky odpovídají úkolům v dané kategorii. Kliknutím na příkaz uživatel nasměruje aplikaci k provedení úkolu.
Nabídka okna je vytvořena a spravována systémem. Obsahuje standardní sadu položek nabídky, které při výběru uživatelem nastavují velikost nebo pozici okna, zavírají aplikaci nebo provádějí úlohy. Pro více informací se podívejte na Nabídky.
Tlačítka v pravém horním rohu ovlivňují velikost a umístění okna. Když kliknete na tlačítko maximalizovat, systém zvětší okno na velikost obrazovky a umístí ho tak, aby pokrývalo celou plochu, kromě panelu úloh. Systém současně nahradí tlačítko maximalizovat tlačítkem obnovit. Když kliknete na tlačítko obnovit, systém obnoví okno na předchozí velikost a pozici. Když kliknete na tlačítko minimalizovat, systém zmenšuje okno na velikost tlačítka hlavního panelu, umístí okno na tlačítko hlavního panelu a zobrazí tlačítko hlavního panelu v normálním stavu. Pokud chcete aplikaci obnovit na předchozí velikost a umístění, klikněte na tlačítko hlavního panelu. Když kliknete na tlačítko zavřít, aplikace se ukončí.
Ohraničení pro změnu velikosti je oblast kolem obvodu okna, která uživateli umožňuje měnit velikost okna pomocí myši nebo jiného polohovacího zařízení.
vodorovný posuvník a svislý posuvník převádí vstup myši nebo klávesnice na hodnoty, které aplikace používá k posunutí obsahu klientské oblasti vodorovně nebo svisle. Například aplikace pro zpracování textu, která zobrazuje dlouhý dokument, obvykle poskytuje svislý posuvník, který uživateli umožňuje stránkovat v dokumentu nahoru a dolů.
Ovládací prvky a dialogová okna
Aplikace může kromě hlavního okna vytvořit několik typů oken, včetně ovládacích prvků a dialogových oken.
Ovládací prvek je okno, které aplikace používá k získání konkrétní informace od uživatele, například název souboru k otevření nebo požadované velikosti bodu výběru textu. Aplikace také používají ovládací prvky k získání informací potřebných k řízení konkrétní funkce aplikace. Například aplikace pro zpracování textu obvykle poskytuje ovládací prvek, který uživateli umožní zapnout a vypnout zalamování slov. Další informace naleznete v tématu Ovládací prvky systému Windows.
Ovládací prvky se vždy používají ve spojení s jiným oknem – obvykle dialogové okno. Dialogové okno je okno, které obsahuje jeden nebo více ovládacích prvků. Aplikace pomocí dialogového okna vyzve uživatele k zadání vstupu potřebného k dokončení příkazu. Například aplikace, která obsahuje příkaz k otevření souboru, zobrazí dialogové okno, které obsahuje ovládací prvky, ve kterých uživatel určuje cestu a název souboru. Dialogová okna obvykle nepoužívají stejnou sadu součástí okna jako hlavní okno. Většina z nich má titulkovou lištu, nabídku okna, ohraničení (bez změny velikosti) a klientskou oblast, ale obvykle nemá řádek nabídek, tlačítka pro minimalizaci a maximalizaci nebo posuvníky. Další informace naleznete v tématu Dialogová okna.
Zprávové pole je speciální dialogové pole, které uživateli zobrazí poznámku, upozornění nebo varování. Například okno se zprávou může informovat uživatele o problému, ke kterým aplikace došlo při provádění úlohy. Další informace naleznete v části Zprávy.
Atributy okna
Aplikace musí při vytváření okna poskytnout následující informace. (S výjimkou úchytu okna, kterou funkce vytvoření vrátí pro jedinečnou identifikaci nového okna.)
- název třídy
- název okna
- styl okna
- rozšířený styl okna
- pozice
- velikost
- úchyt okna nadřazeného nebo vlastníka
- Popisovač nabídky nebo identifikátor Child-Window
- identifikátor instance aplikace
- vytváření dat
- Úchyt okna
Tyto atributy okna jsou popsány v následujících částech.
Název třídy
Každé okno patří do třídy okna. Aplikace musí před vytvořením jakýchkoli oken této třídy zaregistrovat třídu okna. Třída okna definuje většinu aspektů vzhledu a chování okna. Hlavní součástí třídy okna je procedura okna, funkce, která přijímá a zpracovává všechny vstupy a požadavky odeslané do okna. Systém poskytuje vstup a požadavky ve formě zpráv . Další informace naleznete v tématech třídy okna, procedury okena zpráv a fronty zpráv.
Název okna
Název okna je textový řetězec, který identifikuje okno pro uživatele. Hlavní okno, dialogové okno nebo okno se zprávou obvykle zobrazuje jeho název okna v záhlaví, pokud je k dispozici. Ovládací prvek může zobrazit název okna v závislosti na třídě ovládacího prvku. Například tlačítka, úpravy ovládacích prvků a statické ovládací prvky zobrazí jejich názvy oken v obdélníku, který ovládací prvek zabírá. Ovládací prvky, jako jsou například seznamy a pole se seznamem, ale nezobrazují jejich názvy oken.
Pokud chcete po vytvoření okna změnit název okna, použijte funkci SetWindowText . Tato funkce používá funkce GetWindowTextLength a GetWindowText k načtení aktuálního názvu okna.
Styl okna
Každé okno má jeden nebo více stylů oken. Styl okna je pojmenovaná konstanta, která definuje aspekt vzhledu a chování okna, které není určeno třídou okna. Aplikace při vytváření oken obvykle nastavuje styly oken. Styly lze nastavit také po vytvoření okna pomocí funkce SetWindowLong.
Systém a do určité míry procedura okna třídy interpretují styly okna.
Některé styly oken se vztahují na všechna okna, ale většina se vztahuje na okna konkrétních tříd oken. Obecné styly oken jsou reprezentovány konstantami, které začínají předponou WS_; Lze je kombinovat s operátorem OR a vytvořit různé typy oken, včetně hlavních oken, dialogových oken a podřízených oken. Styly oken specifické pro třídu definují vzhled a chování oken patřících do předdefinovaných tříd ovládacích prvků. Například SCROLLBAR třída určuje ovládací prvek posuvníku, ale styly SBS_HORZ a SBS_VERT určují, zda je vytvořen vodorovný nebo svislý posuvník ovládací prvek.
Seznam stylů, které můžou používat okna, najdete v následujících tématech:
- styly oken
- styly tlačítek
- Styly kombinovaného pole
- upravit styly ovládacích prvků
- styly seznamového pole
- Styly ovládacích prvků Rich Edit
- styly ovládání posuvníku
- Statické ovládací styly
Rozšířený styl okna
Každé okno může mít volitelně jeden nebo více rozšířených stylů oken. rozšířený styl okna je pojmenovaná konstanta, která definuje aspekt vzhledu a chování okna, které není určeno třídou okna nebo jinými styly oken. Aplikace při vytváření oken obvykle nastavuje rozšířené styly oken. Styly lze nastavit také po vytvoření okna pomocí funkce SetWindowLong.
Další informace naleznete v tématu CreateWindowEx.
Postavení
Pozice okna je definována jako souřadnice levého horního rohu. Tyto souřadnice, někdy označované jako souřadnice oken, jsou vždy relativní vzhledem k levému hornímu rohu obrazovky nebo, v případě podokna, k levému hornímu rohu klientské oblasti nadřazeného okna. Například okno nejvyšší úrovně se souřadnicemi (10,10) umístí 10 pixelů vpravo od levého horního rohu obrazovky a 10 pixelů dolů od něj. Podřízené okno se souřadnicemi (10,10) je umístěné 10 pixelů vpravo od levého horního rohu klientské oblasti nadřazeného okna a 10 pixelů dolů od něj.
Funkce WindowFromPoint načte popisovač okna, které zabírá určitý bod na obrazovce. Podobně funkce ChildWindowFromPoint a ChildWindowFromPointEx načtou popisovač podřízeného okna umístěného na určitém bodě v klientské oblasti nadřazeného okna. Ačkoliv ChildWindowFromPointEx může ignorovat neviditelná, zakázaná a průhledná podřízená okna, ChildWindowFromPoint nemůže.
Velikost
Velikost okna (šířka a výška) je uvedena v pixelech. Okno může mít nulovou šířku nebo výšku. Pokud aplikace nastaví šířku a výšku okna na nulu, systém nastaví velikost na výchozí minimální velikost okna. Ke zjištění výchozí minimální velikosti okna používá aplikace funkci GetSystemMetrics s příznaky SM_CXMIN a SM_CYMIN.
Aplikace může potřebovat vytvořit okno s klientskou oblastí určité velikosti. Funkce AdjustWindowRect a AdjustWindowRectEx vypočítají požadovanou velikost okna na základě požadované velikosti klientské oblasti. Aplikace může předat výsledné hodnoty velikosti do funkce CreateWindowEx.
Aplikace může měnit velikost okna tak, aby bylo extrémně velké; neměla by však měnit velikost okna tak, aby bylo větší než obrazovka. Před nastavením velikosti okna by aplikace měla zkontrolovat šířku a výšku obrazovky pomocí GetSystemMetrics s příznaky SM_CXSCREEN a SM_CYSCREEN.
Popisovač okna nadřazeného nebo vlastníka
Okno může mít podřízené okno. Okno s nadřazeným objektem se nazývá podřízené okno. Nadřazené okno poskytuje systém souřadnic, který se používá pro umístění podřízeného okna. Nadřazené okno má vliv na aspekty vzhledu okna; Podřízené okno je například oříznuto tak, aby se žádná část podřízeného okna neobjevila mimo ohraničení nadřazeného okna.
Okno, které nemá nadřazené okno, nebo jehož nadřazené okno je okno plochy, se nazývá okno nejvyšší úrovně. Aplikace může použít funkci EnumWindows k získání úchytu pro každé okno nejvyšší úrovně na obrazovce. EnumWindows předá popisovač každému oknu nejvyšší úrovně a následně funkci zpětného volání definovanou aplikací EnumWindowsProc.
Okno nejvyšší úrovně může vlastnit jiné okno, nebo může být vlastněno jiným oknem. vlastněné okno se vždy zobrazí před svým oknem vlastníka, je skryté, když je okno vlastníka minimalizováno, a je zničeno, když je zničeno okno vlastníka. Další informace naleznete v tématu Vlastněné windows.
Popisovač nabídky nebo identifikátor Child-Window
Podřízené okno může mít identifikátor podřízeného okna , což je jedinečná hodnota definovaná aplikací, přidružená k podřízenému oknu. Identifikátory podřízených oken jsou zvláště užitečné v aplikacích, které vytvářejí více podřízených oken. Při vytváření podřízeného okna aplikace určuje identifikátor podřízeného okna. Po vytvoření okna může aplikace změnit identifikátor okna pomocí funkce SetWindowLong nebo může načíst identifikátor pomocí funkce GetWindowLong.
Každé okno kromě podřízeného okna může mít nabídku. Aplikace může obsahovat nabídku poskytnutím popisovače nabídky při zaregistrování třídy okna nebo při vytváření okna.
Popisovač instance aplikace
Každá aplikace má přidružený popisovač instance. Systém poskytuje handlu instance aplikaci, když aplikace startuje. Vzhledem k tomu, že může spustit více kopií stejné aplikace, systém interně zpracovává instance k odlišení jedné instance aplikace od jiné. Aplikace musí uvést popisovač instance v mnoha různých oknech, včetně těch, které vytvářejí okna.
Vytvoření dat
Každé okno může mít přidružená data vytváření definovaná aplikací. Při prvním vytvoření okna systém předá ukazatel na data proceduře okna, které je vytvářeno. Procedura okna používá data k inicializaci proměnných definovaných aplikací.
Úchyt okna
Po vytvoření okna vrátí funkce popisovač okna , který jednoznačně identifikuje okno. Popisovač okna má datový typ HWND; aplikace musí použít tento typ při deklarování proměnné, která obsahuje popisovač okna. Aplikace používá tento popisovač v jiných funkcích k nasměrování akcí na okno.
Aplikace může pomocí funkce FindWindow zjistit, jestli v systému existuje okno se zadaným názvem třídy nebo názvem okna. Pokud takové okno existuje, funkce FindWindow vrátí popisovač okna. Chcete-li omezit vyhledávání na podřízená okna konkrétní aplikace, použijte funkci FindWindowEx.
Funkce IsWindow určuje, zda popisovač okna identifikuje platné existující okno. Existují speciální konstanty, které mohou nahradit úchyt okna v určitých funkcích. Aplikace může například použít HWND_BROADCAST ve funkcích SendMessage a SendMessageTimeout nebo HWND_DESKTOP ve funkci MapWindowPoints.
Vytvoření okna
K vytvoření oken aplikací použijte funkci CreateWindow nebo CreateWindowEx. Je nutné zadat informace potřebné k definování atributů okna. CreateWindowEx má parametr, dwExStyle, který CreateWindow nemá; jinak jsou funkce identické. Ve skutečnosti CreateWindow jednoduše volá CreateWindowEx s parametrem dwExStyle nastaveným na nulu. Z tohoto důvodu zbývající část tohoto přehledu odkazuje pouze na CreateWindowEx.
Tato část obsahuje následující témata:
Poznámka
Existují další funkce pro vytváření oken pro zvláštní účely, jako jsou dialogová okna a okna zpráv. Další informace naleznete v tématu DialogBox, CreateDialoga MessageBox.
Vytvoření hlavního okna
Každá aplikace založená na Systému Windows musí mít jako funkci vstupního bodu WinMain. WinMain provádí řadu úloh, včetně registrace třídy okna pro hlavní okno a vytvoření hlavního okna. WinMain registruje hlavní třídu okna voláním funkce RegisterClass a vytvoří hlavní okno voláním CreateWindowEx funkce.
Funkce WinMain může také aplikaci omezit na jednu instanci. Vytvořte pojmenovaný mutex pomocí funkce CreateMutex. Pokud GetLastError vrátí ERROR_ALREADY_EXISTS, existuje jiná instance vaší aplikace (vytvořila mutex) a měli byste ukončit WinMain.
Systém po vytvoření automaticky nezobrazí hlavní okno; Aplikace musí místo toho k zobrazení hlavního okna použít funkci ShowWindow. Po vytvoření hlavního okna zavolá funkce aplikace WinMainShowWindowa předá mu dva parametry: popisovač hlavního okna a příznak určující, jestli má být hlavní okno minimalizováno nebo maximalizováno při prvním zobrazení. Příznak lze za normálních okolností nastavit na libovolnou konstantu začínající předponou SW_. Pokud je však volána ShowWindow k zobrazení hlavního okna aplikace, příznak musí být nastaven na SW_SHOWDEFAULT. Tento příznak říká systému, aby zobrazil okno podle pokynů programu, který aplikaci spustil.
Pokud byla třída okna zaregistrována ve verzi Unicode RegisterClass, okno přijímá pouze zprávy Unicode. Chcete-li zjistit, zda okno používá znakovou sadu Unicode, zavolejte IsWindowUnicode.
Window-Creation zprávy
Při vytváření libovolného okna systém odesílá zprávy do procedury okna. Systém odešle zprávu WM_NCCREATE po vytvoření neklientské oblasti okna a zprávu WM_CREATE po vytvoření klientské oblasti. Procedura okna obdrží obě zprávy před tím, než systém zobrazí okno. Obě zprávy obsahují ukazatel na strukturu CREATESTRUCT, která obsahuje všechny informace zadané ve funkci CreateWindowEx. Při příjmu těchto zpráv obvykle procedura okna provádí inicializační úlohy.
Při vytváření podřízeného okna systém odešle zprávu WM_PARENTNOTIFY na nadřazené okno poté, co odešle zprávy WM_NCCREATE a WM_CREATE. Při vytváření okna také odesílá další zprávy. Číslo a pořadí těchto zpráv závisí na třídě a stylu okna a na funkci použité k vytvoření okna. Tyto zprávy jsou popsány v dalších tématech v tomto souboru nápovědy.
Vícevláknové aplikace
Aplikace založená na Systému Windows může mít více vláken provádění a každé vlákno může vytvářet okna. Vlákno, které vytvoří okno, musí obsahovat kód pro jeho proceduru okna.
Aplikace může použít funkci EnumThreadWindows k vytvoření výčtu oken vytvořených konkrétním vláknem. Tato funkce předává popisovač každému oknu vlákna a následně funkci zpětného volání definovanou aplikacím EnumThreadWndProc.
Funkce GetWindowThreadProcessId vrátí identifikátor vlákna, které vytvořilo konkrétní okno.
Pokud chcete nastavit stav zobrazení okna vytvořeného jiným vláknem, použijte funkci ShowWindowAsync.