Sdílet prostřednictvím


Funkce okna

Tento přehled popisuje funkce oken, jako jsou typy oken, stavy, velikost a pozice.

Typy oken

Tato část obsahuje následující témata popisující typy oken.

Překrývající se okna

překrývající se okno je okno nejvyšší úrovně (jiné než podřízené okno), které má záhlaví, ohraničení a oblast klienta; slouží jako hlavní okno aplikace. Může mít také nabídku okna, minimalizovat a maximalizovat tlačítka a posuvníky. Překrývající se okno, které se používá jako hlavní okno, obvykle zahrnuje všechny tyto součásti.

Zadáním stylu WS_OVERLAPPED nebo WS_OVERLAPPEDWINDOW ve funkci CreateWindowEx aplikace vytvoří překrývající se okno. Pokud použijete styl WS_OVERLAPPED, bude mít okno záhlaví a ohraničení. Pokud používáte styl WS_OVERLAPPEDWINDOW, má okno záhlaví, velikost ohraničení, nabídku okna a minimalizovat a maximalizovat tlačítka.

Automaticky otevírané okno

automaticky otevírané okno je speciální typ překrývajících se oken používaných pro dialogová okna, okna zpráv a další dočasná okna, která se zobrazují mimo hlavní okno aplikace. Záhlaví jsou volitelné pro automaticky otevíraná okna; v opačném případě jsou automaticky otevíraná okna stejná jako překrývající se okna WS_OVERLAPPED stylu.

Automaticky otevírané okno vytvoříte zadáním stylu WS_POPUP v CreateWindowEx. Pokud chcete zahrnout záhlaví, zadejte styl WS_CAPTION. Pomocí stylu WS_POPUPWINDOW vytvořte automaticky otevírané okno s ohraničením a nabídkou okna. Styl WS_CAPTION se musí kombinovat se stylem WS_POPUPWINDOW, aby byla nabídka okna viditelná.

Podřízená okna

podřízené okno má styl WS_CHILD a je omezen na oblast klienta nadřazeného okna. Aplikace obvykle používá podřízená okna k rozdělení klientské oblasti nadřazeného okna do funkčních oblastí. Podřízené okno vytvoříte zadáním stylu WS_CHILD ve funkci CreateWindowEx.

Podřízené okno musí mít nadřazené okno. Nadřazené okno může být překrývající se okno, automaticky otevírané okno nebo dokonce jiné podřízené okno. Nadřazené okno zadáte při volání CreateWindowEx. Pokud zadáte styl WS_CHILD v CreateWindowEx, ale nezadáte nadřazené okno, systém okno nevytvoří.

Podřízené okno má oblast klienta, ale žádné další funkce, pokud nejsou explicitně požadovány. Aplikace může požádat o záhlaví, nabídku okna, minimalizovat a maximalizovat tlačítka, ohraničení a posuvníky pro podřízené okno, ale podřízené okno nemůže mít nabídku. Pokud aplikace určuje popisovač nabídky, buď při registraci třídy okna dítěte nebo vytvoří podřízené okno, popisovač nabídky se ignoruje. Pokud není zadán žádný styl ohraničení, vytvoří systém okno bez ohraničení. Aplikace může pomocí podřízených oken bez ohraničení rozdělit klientskou oblast nadřazeného okna a zároveň zachovat neviditelné dělení pro uživatele.

Tato část popisuje následující aspekty podřízených oken:

Umístění

Systém vždy umístí podřízené okno vzhledem k levému hornímu rohu klientské oblasti nadřazeného okna. Mimo ohraničení nadřazeného okna se nikdy nezobrazí žádná část podřízeného okna. Pokud aplikace vytvoří podřízené okno, které je větší než nadřazené okno nebo umístí podřízené okno tak, aby některé nebo všechny podřízené okno přesahují hranice nadřazeného objektu, systém vystřihne podřízené okno; to znamená, že část mimo oblast klienta nadřazeného okna se nezobrazí. Akce, které ovlivňují nadřazené okno, mohou také ovlivnit podřízené okno následujícím způsobem.

Nadřazené okno Podřízené okno
Zničený Zničeno před zničením nadřazeného okna.
Schovaný Skryto před skrytou nadřazenou oknem. Podřízené okno je viditelné pouze v případech, kdy je nadřazené okno viditelné.
Přestěhoval Přesunuto s klientskou oblastí nadřazeného okna. Podřízené okno je zodpovědné za malování jeho klientské oblasti po přesunutí.
Ukázaný Zobrazí se po zobrazení nadřazeného okna.

 

Odstřižek

Systém automaticky nevystřižuje podřízené okno z klientské oblasti nadřazeného okna. To znamená, že nadřazené okno nakreslí nad podřízeným oknem, pokud provádí jakýkoli výkres ve stejném umístění jako podřízené okno. Systém však vystřihne podřízené okno z klientské oblasti nadřazeného okna, pokud má nadřazené okno styl WS_CLIPCHILDREN. Pokud je podřízené okno oříznuté, nadřazené okno nad ním nemůže kreslit.

Podřízené okno může překrývat jiná podřízená okna ve stejné klientské oblasti. Podřízené okno, které sdílí stejné nadřazené okno jako jedno nebo více podřízených oken, se nazývá okno stejné. Okna na stejné straně můžou kreslit do klientské oblasti, pokud jedno z podřízených oken nemá WS_CLIPSIBLINGS styl. Pokud má podřízené okno tento styl, vystřihne se jakákoli část okna na stejné stejné straně, která se nachází v podřízeném okně.

Pokud okno má styl WS_CLIPCHILDREN nebo WS_CLIPSIBLINGS, dojde k mírné ztrátě výkonu. Každé okno zabírá systémové prostředky, takže aplikace by neměla používat podřízená okna nerozlišeně. Pro zajištění nejlepšího výkonu by aplikace, která potřebuje logicky rozdělit hlavní okno, by to měla provést v postupu okna hlavního okna, a ne pomocí podřízených oken.

Relace s nadřazenými okny

Aplikace může změnit nadřazené okno existujícího podřízeného okna voláním funkce SetParent. V tomto případě systém odebere podřízené okno z klientské oblasti starého nadřazeného okna a přesune ho do klientské oblasti nového nadřazeného okna. Pokud SetParent určuje popisovač NULL, stane se okno plochy novým nadřazeným oknem. V tomto případě je podřízené okno nakresleno na ploše, mimo ohraničení jakéhokoli jiného okna. Funkce GetParent načte popisovač do nadřazeného okna podřízeného okna.

Nadřazené okno přepojí část jeho klientské oblasti do podřízeného okna a podřízené okno obdrží veškerý vstup z této oblasti. Třída okna nemusí být stejná pro každé podřízené okno nadřazeného okna. To znamená, že aplikace může vyplnit nadřazené okno podřízenými okny, která vypadají jinak a provádějí různé úlohy. Například dialogové okno může obsahovat mnoho typů ovládacích prvků, každé jedno podřízené okno, které přijímá různé typy dat od uživatele.

Podřízené okno má pouze jedno nadřazené okno, ale nadřazené okno může mít libovolný počet podřízených oken. Každé podřízené okno pak může mít podřízená okna. V tomto řetězci oken se každé podřízené okno nazývá potomk původního nadřazeného okna. Aplikace používá funkci IsChild zjistit, jestli je dané okno podřízeným oknem nebo následným oknem daného nadřazeného okna.

Funkce EnumChildWindows výčet podřízených oken nadřazeného okna. Potom EnumChildWindows předá popisovač do každého podřízeného okna do funkce zpětného volání definované aplikací. Okna potomků daného nadřazeného okna jsou také uvedena.

Zprávy

Systém předá vstupní zprávy podřízeného okna přímo do podřízeného okna; zprávy nejsou předány prostřednictvím nadřazeného okna. Jedinou výjimkou je, pokud je podřízené okno zakázáno funkcí EnableWindow. V tomto případě systém předá všechny vstupní zprávy, které by místo toho přešly do podřízeného okna do nadřazeného okna. To umožňuje nadřazené okno zkoumat vstupní zprávy a v případě potřeby povolit podřízené okno.

Podřízené okno může mít jedinečný celočíselné identifikátory. Identifikátory podřízených oken jsou důležité při práci s ovládacími okny. Aplikace směruje aktivitu ovládacího prvku odesláním zpráv. Aplikace používá identifikátor podřízeného okna ovládacího prvku k nasměrování zpráv na ovládací prvek. Ovládací prvek navíc odesílá zprávy s oznámením do nadřazeného okna. Zpráva s oznámením obsahuje identifikátor podřízeného okna ovládacího prvku, který nadřazený objekt používá k identifikaci ovládacího prvku, který zprávu odeslal. Aplikace určuje identifikátor podřízeného okna pro jiné typy podřízených oken nastavením parametru hMenu funkce CreateWindowEx na hodnotu místo popisovače nabídky.

Vrstvené okna

Použití vrstveného okna může výrazně zlepšit výkon a vizuální efekty pro okno, které má složitý obrazec, animuje jeho obrazec nebo si přeje používat efekty alfa prolnutí. Systém automaticky sestaví a překreslí vrstvené okna a okna podkladových aplikací. V důsledku toho se vrstvené okna vykreslují hladce bez blikající typické oblasti složitých oken. Kromě toho mohou být vrstvené okna částečně průsvitná, tj. alfa-blended.

Chcete-li vytvořit vrstvené okno, zadejte WS_EX_LAYERED rozšířený styl okna při volání CreateWindowEx funkce, nebo zavolejte funkci SetWindowLong nastavit WS_EX_LAYERED po vytvoření okna. Po volání CreateWindowEx se vrstvené okno nezobrazí, dokud SetLayeredWindowAttributes nebo UpdateLayeredWindow funkce byla volána pro toto okno.

Poznámka

Počínaje Systémem Windows 8 je možné WS_EX_LAYERED používat s podřízenými okny a okny nejvyšší úrovně. Předchozí verze Windows podporují WS_EX_LAYERED pouze pro okna nejvyšší úrovně.

 

Pokud chcete nastavit úroveň neprůhlednosti nebo barevný klíč průhlednosti pro dané vrstvené okno, zavolejte SetLayeredWindowAttributes. Po volání může systém i nadále požádat okno, aby maloval, když se okno zobrazí nebo změní jeho velikost. Vzhledem k tomu, že systém ukládá obrázek vrstveného okna, systém nebude žádat okno, aby maloval, pokud se části objeví v důsledku relativního okna pohybující se na ploše. Starší aplikace nemusí restrukturalizovat kód obrazu, pokud chtějí přidat průsvitné nebo průhlednost efekty pro okno, protože systém přesměruje obraz oken, které se nazývají SetLayeredWindowAttributes do paměti mimo obrazovku a znovu ho zkompisuje, aby dosáhl požadovaného efektu.

Pro rychlejší a efektivnější animaci nebo v případě potřeby alfa na pixel volání UpdateLayeredWindow. UpdateLayeredWindow by se měl používat především v případě, že aplikace musí přímo zadat obrazec a obsah vrstveného okna, aniž by systém používal mechanismus přesměrování, který systém poskytuje prostřednictvím SetLayeredWindowAttributes. Kromě toho použití UpdateLayeredWindow přímo používá paměť efektivněji, protože systém nepotřebuje další paměť potřebnou k uložení obrázku přesměrovaného okna. Pro zajištění maximální efektivity při animaci oken zavolejte UpdateLayeredWindow změnit pozici a velikost vrstveného okna. Upozorňujeme, že po zavolání SetLayeredWindowAttributes následující volání UpdateLayeredWindow selžou, dokud se bit stylu vrstvení nevymaže a znovu nenastaví.

Testování návrstvého okna je založeno na tvaru a průhlednosti okna. To znamená, že oblasti okna, které jsou barevně zabarvené nebo jejichž alfa hodnota je nula, umožní zprávy myši procházet. Pokud má však vrstvené okno WS_EX_TRANSPARENT rozšířený styl okna, bude tvar vrstveného okna ignorován a události myši budou předány do jiných oken pod vrstveným oknem.

Message-Only Windows

Okno pouze zpráv umožňuje odesílat a přijímat zprávy. Není viditelný, nemá žádné pořadí vykreslování, nelze zobrazit výčet a nepřijímá zprávy všesměrového vysílání. Okno jednoduše odesílá zprávy.

Chcete-li vytvořit okno pouze se zprávou, zadejte HWND_MESSAGE konstantu nebo popisovač existujícího okna jen pro zprávu v hWndParent parametru CreateWindowEx funkce. Existující okno můžete také změnit na okno pouze se zprávou zadáním HWND_MESSAGE v parametru hWndNewParent funkce SetParent.

Chcete-li najít okna pouze se zprávami, zadejte HWND_MESSAGE v parametru hwndParent funkce FindWindowEx. Kromě toho FindWindowEx prohledá okna pouze se zprávami a také okna nejvyšší úrovně, pokud jsou parametry hwndParent i hwndChildAfterNULL.

Relace oken

Existuje mnoho způsobů, jak může okno souviset s uživatelem nebo jiným oknem. Okno může být vlastněné okno, okno popředí nebo okno pozadí. Okno má také pořadí vykreslování vzhledem k jiným oknům. Další informace najdete v následujících tématech:

Popředí a okna pozadí

Každý proces může mít více vláken spuštění a každé vlákno může vytvářet okna. Vlákno, které vytvořilo okno, se kterým uživatel právě pracuje, se nazývá vlákno popředí a okno se nazývá okno popředí. Všechna ostatní vlákna jsou vlákna na pozadí a okna vytvořená vlákny pozadí se nazývají okna pozadí.

Každé vlákno má úroveň priority, která určuje dobu, po kterou vlákno obdrží. I když aplikace může nastavit úroveň priority svých vláken, obvykle má vlákno popředí mírně vyšší úroveň priority než vlákna na pozadí. Vzhledem k tomu, že má vyšší prioritu, vlákno popředí přijímá více času procesoru než vlákna na pozadí. Vlákno popředí má normální základní prioritu 9; vlákno na pozadí má normální základní prioritu 7.

Uživatel nastaví okno popředí kliknutím na okno nebo kombinací kláves ALT+TAB nebo ALT+ESC. Pokud chcete načíst popisovač okna popředí, použijte funkci GetForegroundWindow. Pokud chcete zkontrolovat, jestli je okno aplikace oknem popředí, porovnejte popisovač vrácený GetForegroundWindow s oknem aplikace.

Aplikace nastaví okno popředí pomocí funkce SetForegroundWindow.

Systém omezuje procesy, které mohou nastavit okno popředí. Proces může nastavit okno popředí pouze v případě, že:

  • Platí všechny následující podmínky:
    • Proces volání SetForegroundWindow patří do desktopové aplikace, nikoli do aplikace pro UPW nebo aplikace pro Windows Store určená pro Windows 8 nebo 8.1.
    • Proces popředí nezakázal volání SetForegroundWindow předchozím voláním funkce LockSetForegroundWindow.
    • Vypršel časový limit uzamčení popředí (viz SPI_GETFOREGROUNDLOCKTIMEOUT v SystemParametersInfo).
    • Nejsou aktivní žádné nabídky.
  • Navíc platí alespoň jedna z následujících podmínek:
    • Volající proces je proces popředí.
    • Proces volání byl zahájen procesem popředí.
    • V současné době neexistuje žádné okno popředí, a proto žádný proces popředí.
    • Volající proces přijal poslední vstupní událost.
    • Proces popředí nebo volající proces se ladí.

Proces může být odepřen právo nastavit okno popředí, i když splňuje tyto podmínky.

Proces, který může nastavit okno popředí, může povolit jiný proces nastavit okno popředí voláním AllowSetForegroundWindow funkce, nebo voláním BroadcastSystemMessage funkce s příznakem BSF_ALLOWSFW. Proces popředí může zakázat volání SetForegroundWindow voláním funkce LockSetForegroundWindow.

Vlastněná okna

Překrývající se nebo automaticky otevírané okno může vlastnit jiné překrývající se nebo automaticky otevírané okno. Vlastníkem je několik omezení okna.

  • Vlastní okno je vždy nad jeho vlastníkem v objednávce z.
  • Systém po zničení vlastníka automaticky zničí vlastní okno.
  • Při minimalizaci vlastníka se skryje vlastní okno.

Pouze překrývající se nebo automaticky otevírané okno může být okno vlastníka; podřízeným oknem nemůže být okno vlastníka. Aplikace vytvoří vlastní okno zadáním popisovače okna vlastníka jako hwndParent parametr CreateWindowEx při vytváření okna s WS_OVERLAPPED nebo WS_POPUP stylem. Parametr hwndParent musí identifikovat překrývající se nebo automaticky otevírané okno. Pokud hwndParent identifikuje podřízené okno, systém přiřadí vlastnictví nadřazeného okna nejvyšší úrovně podřízeného okna. Po vytvoření vlastněného okna nemůže aplikace převést vlastnictví okna do jiného okna.

Dialogová okna a okna zpráv jsou ve výchozím nastavení vlastněná okny. Aplikace určuje okno vlastníka při volání funkce, která vytvoří dialogové okno nebo okno zprávy.

Aplikace může pomocí funkce GetWindow s příznakem GW_OWNER načíst popisovač vlastníkovi okna.

Pořadí Z

pořadí vykreslování okna označuje pozici okna v zásobníku překrývajících se oken. Tento zásobník oken je orientovaný na imaginární osu, osu z, která se rozšiřuje směrem ven z obrazovky. Okno v horní části pořadí vykreslování překrývá všechna ostatní okna. Okno v dolní části pořadí vykreslování se překrývají všemi ostatními okny.

Systém udržuje pořadí vykreslování v jednom seznamu. Přidá okna do pořadí vykreslování podle toho, jestli se jedná o okna nejvyšší úrovně, okna nejvyšší úrovně nebo podřízená okna. Horní okno překrývají všechna ostatní nevrchnější okna bez ohledu na to, jestli se jedná o aktivní nebo popředí okna. Horní okno má styl WS_EX_TOPMOST. Všechna horní okna se zobrazí v pořadí z před všemi nejvrchnějšími okny. Podřízené okno je seskupené s nadřazeným objektem v pořadí z.

Když aplikace vytvoří okno, systém ho umístí na začátek pořadí vykreslování pro okna stejného typu. Funkci BringWindowToTop můžete použít k přenesení okna na začátek pořadí vykreslování pro okna stejného typu. Pořadí vykreslování můžete změnit pomocí funkcí SetWindowPos a DeferWindowPos.

Uživatel změní pořadí vykreslování aktivací jiného okna. Systém umístí aktivní okno v horní části pořadí vykreslování pro okna stejného typu. Když se okno dostane na začátek pořadí vykreslování, udělejte tak jeho podřízená okna. Pomocí funkce GetTopWindow můžete prohledávat všechna podřízená okna nadřazeného okna a vrátit popisovač do podřízeného okna, které je nejvyšší v pořadí z. Funkce GetNextWindow načte popisovač do dalšího nebo předchozího okna v pořadí z.

Stav zobrazení okna

V každém okamžiku může být okno aktivní nebo neaktivní; skryté nebo viditelné; a minimalizované, maximalizované nebo obnovené. Tyto vlastnosti jsou označovány souhrnně jako okno zobrazit stav. Následující témata popisují stav zobrazení okna:

Aktivní okno

aktivní okno je okno nejvyšší úrovně aplikace, se kterou uživatel právě pracuje. Aby uživatel mohl snadno identifikovat aktivní okno, systém ho umístí do horní části pořadí vykreslování a změní barvu záhlaví a ohraničení na barvy aktivního aktivního okna definované systémem. Aktivní okno může být pouze okno nejvyšší úrovně. Když uživatel pracuje s podřízeným oknem, systém aktivuje nadřazené okno nejvyšší úrovně spojené s podřízeným oknem.

V systému je aktivní jenom jedno okno nejvyšší úrovně. Uživatel aktivuje okno nejvyšší úrovně tak, že na něj klikne (nebo na jedno z podřízených oken) nebo pomocí kombinace kláves ALT+ESC nebo ALT+TAB. Aplikace aktivuje okno nejvyšší úrovně voláním funkce SetActiveWindow. Jiné funkce mohou způsobit, že systém aktivuje jiné okno nejvyšší úrovně, včetně SetWindowPos, DeferWindowPos, SetWindowPlacementa DestroyWindow. I když aplikace může kdykoli aktivovat jiné okno nejvyšší úrovně, aby se zabránilo matoucímu uživateli, mělo by to udělat pouze v reakci na akci uživatele. Aplikace používá funkci GetActiveWindow k načtení popisovače do aktivního okna.

Když se aktivace změní z okna nejvyšší úrovně jedné aplikace do okna nejvyšší úrovně jiného, systém odešle WM_ACTIVATEAPP zprávu oběma aplikacím a upozorní je na změnu. Když se aktivace změní na jiné okno nejvyšší úrovně ve stejné aplikaci, systém odešle obě okna WM_ACTIVATE zprávu.

Zakázaná okna

Okno je možné zakázat. zakázané okno od uživatele neobdrží žádný vstup klávesnice nebo myši, ale může přijímat zprávy z jiných oken, z jiných aplikací a ze systému. Aplikace obvykle zakáže okno, aby uživatel nemohl okno používat. Aplikace může například zakázat tlačítko v dialogovém okně, aby ho uživatel nemohl zvolit. Aplikace může kdykoli povolit zakázané okno; povolením okna obnovíte normální vstup.

Ve výchozím nastavení je při vytváření povolené okno. Aplikace ale může zadat styl WS_DISABLED, aby se zakázalo nové okno. Aplikace povolí nebo zakáže existující okno pomocí funkce EnableWindow. Systém odešle WM_ENABLE zprávu do okna, když se chystá změnit jeho povolený stav. Aplikace může určit, zda je okno povoleno pomocí funkce IsWindowEnabled.

Když je podřízené okno zakázané, systém předá podřízené vstupní zprávy myši do nadřazeného okna. Nadřazený objekt používá zprávy k určení, zda se má podřízené okno povolit. Další informace naleznete v tématu Vstup myši.

Pouze jedno okno najednou může přijímat vstup klávesnice; o tom, že okno má fokus klávesnice. Pokud aplikace používá funkci EnableWindow k zakázání okna fokusu klávesnice, ztratí okno kromě zakázání i fokus klávesnice. EnableWindow pak nastaví fokus klávesnice na NULL, což znamená, že žádné okno nemá fokus. Pokud má podřízené okno nebo jiné okno potomků fokus klávesnice, pak okno potomka ztratí fokus, když je nadřazené okno zakázané. Další informace naleznete v tématu vstup klávesnice.

Viditelnost okna

Okno může být viditelné nebo skryté. Systém na obrazovce zobrazí viditelné okno. Skryje skryté okno tím, že ho nenakreslete. Pokud je okno viditelné, může uživatel zadat vstup do okna a zobrazit výstup okna. Pokud je okno skryté, je účinně zakázáno. Skryté okno může zpracovávat zprávy ze systému nebo z jiných oken, ale nemůže zpracovat vstup od uživatele nebo zobrazit výstup. Aplikace při vytváření okna nastaví stav viditelnosti okna. Později může aplikace změnit stav viditelnosti.

Okno se zobrazí, když je pro okno nastaven styl WS_VISIBLE. Ve výchozím nastavení CreateWindowEx funkce vytvoří skryté okno, pokud aplikace neurčí styl WS_VISIBLE. Aplikace obvykle nastaví WS_VISIBLE styl poté, co vytvoří okno, aby byly podrobnosti procesu vytváření skryté uživateli. Aplikace může například zachovat nové okno skryté, když přizpůsobí vzhled okna. Pokud je styl WS_VISIBLE zadán v CreateWindowEx, systém odešle WM_SHOWWINDOW zprávu do okna po vytvoření okna, ale před zobrazením.

Aplikace může určit, jestli je okno viditelné pomocí funkce IsWindowVisible. Aplikace může zobrazit (zobrazit) nebo skrýt okno pomocí ShowWindow, SetWindowPos, DeferWindowPosnebo SetWindowPlacement nebo SetWindowLong funkce. Tyto funkce zobrazí nebo skryjí okno nastavením nebo odebráním stylu WS_VISIBLE okna. Před zobrazením nebo skrytím také odešlou zprávu WM_SHOWWINDOW do okna.

Když je minimalizované okno vlastníka, systém automaticky skryje přidružená vlastní okna. Podobně když se obnoví okno vlastníka, systém automaticky zobrazí přidružená vlastní okna. V obou případech systém před skrytím nebo zobrazením odešle zprávu WM_SHOWWINDOW do vlastněných oken. Někdy může aplikace potřebovat skrýt vlastněná okna, aniž by bylo nutné minimalizovat nebo skrýt vlastníka. V tomto případě aplikace používá funkci ShowOwnedPopups. Tato funkce nastaví nebo odebere styl WS_VISIBLE pro všechna vlastněná okna a před skrytím nebo zobrazením odešle zprávu WM_SHOWWINDOW do vlastněných oken. Skrytí okna vlastníka nemá žádný vliv na stav viditelnosti vlastněných oken.

Když je zobrazené nadřazené okno, zobrazí se také přidružená podřízená okna. Podobně platí, že pokud je nadřazené okno skryté, jsou jeho podřízená okna také skrytá. Minimalizace nadřazeného okna nemá žádný vliv na stav viditelnosti podřízených oken; to znamená, že podřízená okna jsou minimalizovaná spolu s nadřazeným objektem, ale styl WS_VISIBLE se nezmění.

I když má okno styl WS_VISIBLE, uživatel nemusí být schopen zobrazit okno na obrazovce; jiná okna se můžou úplně překrývat nebo byla přesunuta za okraj obrazovky. Viditelné podřízené okno také podléhá pravidlům výřezu vytvořeným vztahem nadřazeného a podřízeného objektu. Pokud nadřazené okno okna není viditelné, nebude také viditelné. Pokud se nadřazené okno přesune nad okraj obrazovky, přesune se také podřízené okno, protože podřízené okno je vykresleno vzhledem k levému hornímu rohu nadřazeného objektu. Uživatel může například přesunout nadřazené okno obsahující podřízené okno dostatečně daleko od okraje obrazovky, že uživatel nemusí vidět podřízené okno, i když podřízené okno i nadřazené okno mají WS_VISIBLE styl.

Minimalizovaná, maximalizovaná a obnovená okna

maximalizované okno je okno se stylem WS_MAXIMIZE. Ve výchozím nastavení systém zvětší maximalizované okno tak, aby vyplnil obrazovku nebo v případě podřízeného okna klientskou oblast nadřazeného okna. I když velikost okna může být nastavena na stejnou velikost maximalizovaného okna, maximalizované okno se mírně liší. Systém automaticky přesune záhlaví okna do horní části obrazovky nebo do horní části klientské oblasti nadřazeného okna. Systém také zakáže velikost ohraničení okna a možnosti umístění okna záhlaví (aby uživatel nemohl okno přesunout přetažením záhlaví).

minimalizované okno je okno se stylem WS_MINIMIZE. Ve výchozím nastavení systém zmenšuje minimalizované okno na velikost tlačítka hlavního panelu a přesune minimalizované okno na hlavní panel. obnovené okno je okno, které bylo vráceno do předchozí velikosti a pozice, tj. velikost, kterou byla před minimalizací nebo maximalizací.

Pokud aplikace určuje styl WS_MAXIMIZE nebo WS_MINIMIZE ve funkci CreateWindowEx, okno se zpočátku maximalizuje nebo minimalizuje. Po vytvoření okna může aplikace k minimalizaci okna použít funkci CloseWindow. Funkce ArrangeIconicWindows uspořádá ikony na ploše nebo uspořádá minimalizovaná podřízená okna nadřazeného okna v nadřazené okně. Funkce OpenIcon obnoví minimalizované okno na předchozí velikost a pozici.

Funkce ShowWindow může minimalizovat, maximalizovat nebo obnovit okno. Může také nastavit viditelnost a stavy aktivace okna. Funkce SetWindowPlacement zahrnuje stejné funkce jako ShowWindow, ale může přepsat výchozí minimalizované, maximalizované a obnovené pozice okna.

Funkce IsZoomed a IsIconic určují, jestli je dané okno maximalizované nebo minimalizované. Funkce GetWindowPlacement načte minimalizované, maximalizované a obnovené pozice okna a také určuje stav zobrazení okna.

Když systém obdrží příkaz k maximalizaci nebo obnovení minimalizované okno, odešle okno WM_QUERYOPEN zprávu. Pokud procedura okna vrátí FALSE, systém ignoruje příkaz maximalizovat nebo obnovit.

Systém automaticky nastaví velikost a pozici maximalizovaného okna na výchozí hodnoty definované systémem pro maximalizované okno. Pokud chcete tyto výchozí hodnoty přepsat, může aplikace buď volat funkci SetWindowPlacement, nebo zpracovat WM_GETMINMAXINFO zprávu, která se přijme v okně, když se systém chystá maximalizovat okno. WM_GETMINMAXINFO obsahuje ukazatel na strukturu MINMAXINFO obsahující hodnoty, které systém používá k nastavení maximalizované velikosti a pozice. Nahrazení těchto hodnot přepíše výchozí hodnoty.

Velikost a umístění okna

Velikost a umístění okna se vyjadřují jako ohraničující obdélník vzhledem k obrazovce nebo nadřazeným oknem. Souřadnice okna nejvyšší úrovně jsou relativní vzhledem k levému hornímu rohu obrazovky; souřadnice podřízeného okna jsou relativní vzhledem k levému hornímu rohu nadřazeného okna. Aplikace určuje počáteční velikost a umístění okna při vytváření okna, ale může kdykoli změnit velikost a umístění okna. Další informace naleznete v tématu vyplněné obrazce.

Tato část obsahuje následující témata:

Výchozí velikost a umístění

Aplikace může systému umožnit vypočítat počáteční velikost nebo pozici okna nejvyšší úrovně zadáním CW_USEDEFAULT v CreateWindowEx. Pokud aplikace nastaví souřadnice okna na CW_USEDEFAULT a nevytvořila žádná další okna nejvyšší úrovně, systém nastaví pozici nového okna vzhledem k levému hornímu rohu obrazovky; v opačném případě nastaví pozici relativní k pozici okna nejvyšší úrovně, kterou aplikace vytvořila naposledy. Pokud jsou parametry šířky a výšky nastaveny na CW_USEDEFAULT, systém vypočítá velikost nového okna. Pokud aplikace vytvořila další okna nejvyšší úrovně, systém zarovná velikost nového okna na velikosti naposledy vytvořeného okna nejvyšší úrovně aplikace. Zadání CW_USEDEFAULT při vytváření podřízeného nebo automaticky otevíracího okna způsobí, že systém nastaví velikost okna na výchozí minimální velikost okna.

Velikost sledování

Systém udržuje minimální a maximální velikost sledování pro okno WS_THICKFRAME stylu; okno s tímto stylem má ohraničení velikosti. Minimální velikost sledování je nejmenší velikost okna, kterou můžete vytvořit přetažením ohraničení okna. Podobně maximální velikost sledování je největší velikost okna, kterou můžete vytvořit přetažením ohraničení velikosti.

Minimální a maximální velikost sledování okna se při vytváření okna nastaví na výchozí hodnoty definované systémem. Aplikace může zjistit výchozí hodnoty a přepsat je zpracováním zprávy WM_GETMINMAXINFO. Další informace naleznete v tématu Velikost a umístění zprávy.

Systémové příkazy

Aplikace, která má nabídku okna, může změnit velikost a umístění tohoto okna odesláním systémových příkazů. Systémové příkazy se generují, když uživatel vybere příkazy z nabídky okna. Aplikace může emulovat akci uživatele odesláním WM_SYSCOMMAND zprávy do okna. Následující systémové příkazy ovlivňují velikost a umístění okna.

Příkaz Popis
SC_CLOSE Zavře okno. Tento příkaz odešle do okna zprávu WM_CLOSE. Okno provádí všechny kroky potřebné k vyčištění a zničení samotné.
SC_MAXIMIZE Maximalizuje okno.
SC_MINIMIZE Minimalizuje okno.
SC_MOVE Přesune okno.
SC_RESTORE Obnoví minimalizované nebo maximalizované okno na předchozí velikost a pozici.
SC_SIZE Spustí příkaz velikost. Pokud chcete změnit velikost okna, použijte myš nebo klávesnici.

 

Funkce velikostí a umístění

Po vytvoření okna může aplikace nastavit velikost nebo pozici okna voláním jedné z několika různých funkcí, včetně SetWindowPlacement, MoveWindow, SetWindowPosa DeferWindowPos. SetWindowPlacement nastaví minimalizovanou pozici okna, maximalizovanou pozici, obnovenou velikost a pozici a zobrazí stav. Funkce MoveWindow a SetWindowPos jsou podobné; obě nastaví velikost nebo pozici jednoho okna aplikace. Funkce SetWindowPos obsahuje sadu příznaků, které ovlivňují stav zobrazení okna; MoveWindow tyto příznaky nezahrnují. Pomocí funkce BeginDeferWindowPos, DeferWindowPosa EndDeferWindowPos současně nastavte pozici řady oken, včetně velikosti, pozice, pozice v pořadí z a zobrazení stavu.

Aplikace může načíst souřadnice ohraničujícího obdélníku okna pomocí funkce GetWindowRect. GetWindowRect vyplní strukturu RECT souřadnicemi levého horního a pravého dolního rohu okna. Souřadnice jsou relativní vzhledem k levému hornímu rohu obrazovky, a to i pro podřízené okno. Funkce ScreenToClient nebo MapWindowPoints mapuje souřadnice obrazovky ohraničujícího obdélníku podřízeného okna na souřadnice vzhledem k klientské oblasti nadřazeného okna.

Funkce GetClientRect načte souřadnice klientské oblasti okna. GetClientRect vyplní strukturu RECT souřadnicemi levého horního a pravého dolního rohu klientské oblasti, ale souřadnice jsou relativní k samotné klientské oblasti. To znamená, že souřadnice levého horního rohu klientské oblasti jsou vždy (0,0) a souřadnice pravého dolního rohu jsou šířka a výška klientské oblasti.

Funkce CascadeWindows kaskáduje okna na ploše nebo kaskáduje podřízená okna zadaného nadřazeného okna. TileWindows funkce dlaždice oken na ploše nebo dlaždicích podřízených oken zadaného nadřazeného okna.

Velikost a umístění zpráv

Systém odešle WM_GETMINMAXINFO zprávu do okna, jehož velikost nebo pozice se chystá změnit. Zpráva se například odešle, když uživatel klikne na Přesunout nebo Velikost z nabídky okna nebo klikne na ohraničení velikosti nebo záhlaví; zpráva se odešle také při volání aplikace SetWindowPos přesunout nebo změnit velikost okna. WM_GETMINMAXINFO obsahuje ukazatel na strukturu MINMAXINFO obsahující výchozí maximalizovanou velikost a umístění okna a také výchozí minimální a maximální velikost sledování. Aplikace může přepsat výchozí hodnoty zpracováním WM_GETMINMAXINFO a nastavením příslušných členů MINMAXINFO. Okno musí mít styl WS_THICKFRAME nebo WS_CAPTION pro příjem WM_GETMINMAXINFO. Okno se stylem WS_THICKFRAME obdrží tuto zprávu během procesu vytváření okna i při přesouvání nebo velikosti.

Systém odešle WM_WINDOWPOSCHANGING zprávu do okna, jehož velikost, pozice, pozice v pořadí vykreslování nebo zobrazení stavu se chystá změnit. Tato zpráva obsahuje ukazatel na strukturu WINDOWPOS, která určuje novou velikost, pozici, pozici okna v pořadí vykreslování a zobrazení stavu. Nastavením členů WINDOWPOSmůže aplikace ovlivnit novou velikost, umístění a vzhled okna.

Po změně velikosti, pozice, pozice okna nebo zobrazení stavu odešle systém do okna zprávu WM_WINDOWPOSCHANGED. Tato zpráva obsahuje ukazatel na WINDOWPOS, který informuje okno o nové velikosti, pozici, pozici v pořadí z a zobrazení stavu. Nastavení členů struktury WINDOWPOS, která je předána s WM_WINDOWPOSCHANGED nemá na okno žádný vliv. Okno, které musí zpracovávat WM_SIZE a zprávy WM_MOVE musí předávat WM_WINDOWPOSCHANGED funkciDefWindowProc; jinak systém neodesílá WM_SIZE a WM_MOVE zprávy do okna.

Systém odešle WM_NCCALCSIZE zprávu do okna při vytvoření nebo velikosti okna. Systém používá zprávu k výpočtu velikosti klientské oblasti okna a umístění klientské oblasti vzhledem k levému hornímu rohu okna. Okno obvykle předává tuto zprávu do výchozí procedury okna; Tato zpráva ale může být užitečná v aplikacích, které přizpůsobují oblast bez klienta okna nebo zachovávají části klientské oblasti, pokud je okno velké. Další informace naleznete v tématu malování a kreslení.

Animace okna

Při zobrazení nebo skrytí oken můžete vytvořit speciální efekty pomocí funkce AnimateWindow. Když je okno tímto způsobem animované, systém buď roll, slide, nebo fade the window, v závislosti na příznakech, které zadáte v volání AnimateWindow.

Ve výchozím nastavení systém používá animační. Díky tomuto efektu se okno zobrazí jako otevřené (se zobrazeným oknem) nebo zavřené (skrytí okna). Pomocí parametru dwFlags můžete určit, jestli se okno vodorovně, svisle nebo diagonálně válí.

Když zadáte příznak AW_SLIDE, systém použije animaci snímku. Díky tomuto efektu se okno zobrazí k zobrazení (zobrazení okna) nebo vysunutí z zobrazení (skrytí okna). Pomocí parametru dwFlags můžete určit, jestli se okno posune vodorovně, svisle nebo diagonálně.

Když zadáte příznak AW_BLEND, systém použije alfa-blended fade.

Pomocí příznaku AW_CENTER můžete také nastavit, aby se okno zobrazilo sbalit dovnitř nebo rozbalit směrem ven.

Rozložení a zrcadlení oken

Rozložení okna definuje, jak se text a objekty GDI (Graphics Device Interface) v okně nebo kontextu zařízení (DC). Některé jazyky, jako je angličtina, francouzština a němčina, vyžadují rozložení Zleva doprava (LTR). Jiné jazyky, jako je arabština a hebrejština, vyžadují rozložení zprava doleva (RTL). Rozložení okna platí pro text, ale také ovlivňuje ostatní prvky GDI okna, včetně rastrových obrázků, ikon, umístění původu, tlačítek, kaskádových ovládacích prvků stromu a toho, jestli se vodorovná souřadnice zvyšuje při přechodu doleva nebo doprava. Například po nastavení rozložení RTL aplikace se počátek umístí na pravý okraj okna nebo zařízení a číslo představující vodorovnou souřadnici se při pohybu doleva zvýší. Rozložení okna však neovlivní všechny objekty. Například rozložení dialogových oken, polí zpráv a kontextů zařízení, které nejsou přidruženy k oknu, jako je například metasoubor a řadiče domény tiskárny, musí být zpracováváno samostatně. Podrobnosti o těchto tématech jsou uvedeny dále v tomto tématu.

Funkce okna umožňují zadat nebo změnit rozložení okna v arabštině a hebrejštině ve Windows. Všimněte si, že změna rozložení RTL (označované také jako zrcadlení) není podporována pro okna, která mají styl CS_OWNDC nebo dc s grafickým režimem GM_ADVANCED.

Ve výchozím nastavení je rozložení okna zleva doprava (LTR). Pokud chcete nastavit rozložení okna RTL, zavolejte CreateWindowEx se stylem WS_EX_LAYOUTRTL. Ve výchozím nastavení má podřízené okno (tj. okno vytvořené se stylem WS_CHILD a platným nadřazeným parametrem hWnd ve volání CreateWindow nebo CreateWindowEx) stejné rozložení jako nadřazený objekt. Chcete-li zakázat dědičnost zrcadlení do všech podřízených oken, zadejte WS_EX_NOINHERITLAYOUT ve volání CreateWindowEx. Všimněte si, zrcadlení není zděděno vlastními okny (ty vytvořené bez stylu WS_CHILD) nebo objekty vytvořené s nadřazeným parametrem hWnd v CreateWindowEx nastavené na NULL. Pokud chcete zakázat dědičnost zrcadlení pro jednotlivá okna, zpracujte zprávu WM_NCCREATE pomocí GetWindowLong a SetWindowLong vypnout příznak WS_EX_LAYOUTRTL. Toto zpracování je navíc k dalšímu zpracování potřeba. Následující fragment kódu ukazuje, jak se to dělá.

SetWindowLong (hWnd, 
               GWL_EXSTYLE, 
               GetWindowLong(hWnd,GWL_EXSTYLE) & ~WS_EX_LAYOUTRTL))

Výchozí rozložení můžete nastavit na RTL voláním SetProcessDefaultLayout(LAYOUT_RTL). Všechna okna vytvořená po volání se zrcadlí, ale stávající okna nejsou ovlivněna. Pokud chcete vypnout výchozí zrcadlení, zavolejte SetProcessDefaultLayout(0).

Všimněte si, SetProcessDefaultLayout zrcadlí pouze řadiče domény zrcadlených oken. Pokud chcete zrcadlit libovolný řadič domény, zavolejte SetLayout(hdc, LAYOUT_RTL). Další informace najdete v diskuzi o kontextu zrcadlení zařízení, které nejsou spojené s okny, které přichází dále v tomto tématu.

Rastrové obrázky a ikony v zrcadleném okně se ve výchozím nastavení zrcadlí. Ne všechny by ale měly být zrcadlené. Například ty s textem, obchodním logem nebo analogovými hodinami by neměly být zrcadlené. Chcete-li zakázat zrcadlení rastrových obrázků, zavolejte SetLayout s LAYOUT_BITMAPORIENTATIONPRESERVED bitovou sadou v dwLayout. Chcete-li zakázat zrcadlení v řadiči domény, zavolejte SetLayout(hdc, 0).

Pokud chcete dotazovat aktuální výchozí rozložení, zavolejte GetProcessDefaultLayout. Po úspěšném vrácení pdwDefaultLayout obsahuje LAYOUT_RTL nebo 0. Pokud chcete dotazovat nastavení rozložení kontextu zařízení, zavolejte GetLayout. Po úspěšném vrácení vrátí GetLayout DWORD, který označuje nastavení rozložení nastavením LAYOUT_RTL a LAYOUT_BITMAPORIENTATIONPRESERVED bitů.

Po vytvoření okna změníte rozložení pomocí funkce SetWindowLong. To je třeba v případě, že uživatel změní jazyk uživatelského rozhraní existujícího okna z arabštiny nebo hebrejštiny na němčinu. Při změně rozložení existujícího okna však musíte okno zneplatnit a aktualizovat, aby se zajistilo, že obsah okna bude nakreslen ve stejném rozložení. Následující příklad kódu pochází z ukázkového kódu, který podle potřeby změní rozložení okna:

// Using ANSI versions of GetWindowLong and SetWindowLong because Unicode
// is not needed for these calls

lExStyles = GetWindowLongA(hWnd, GWL_EXSTYLE);

// Check whether new layout is opposite the current layout
if (!!(pLState -> IsRTLLayout) != !!(lExStyles & WS_EX_LAYOUTRTL))
{
    // the following lines will update the window layout

    lExStyles ^= WS_EX_LAYOUTRTL;        // toggle layout
    SetWindowLongA(hWnd, GWL_EXSTYLE, lExStyles);
    InvalidateRect(hWnd, NULL, TRUE);    // to update layout in the client area
}

Při zrcadlení byste měli uvažovat o "blízké" a "daleko" místo "vlevo" a "vpravo". Pokud to neuděláte, může to způsobit problémy. Jednou z běžných programovacích postupů, které způsobují problémy v zrcadleném okně, dochází při mapování mezi souřadnicemi obrazovky a klientskými souřadnicemi. Například aplikace často používají kód podobný následujícímu k umístění ovládacího prvku v okně:

// DO NOT USE THIS IF APPLICATION MIRRORS THE WINDOW

// get coordinates of the window in screen coordinates
GetWindowRect(hControl, (LPRECT) &rControlRect);  

// map screen coordinates to client coordinates in dialog
ScreenToClient(hDialog, (LPPOINT) &rControlRect.left); 
ScreenToClient(hDialog, (LPPOINT) &rControlRect.right);

To způsobuje problémy se zrcadlením, protože levý okraj obdélníku se změní na pravý okraj v zrcadleném okně a naopak. Chcete-li se tomuto problému vyhnout, nahraďte ScreenToClient voláním MapWindowPoint s následujícím způsobem:

// USE THIS FOR MIRRORING

GetWindowRect(hControl, (LPRECT) &rControlRect);
MapWindowPoints(NULL, hDialog, (LPPOINT) &rControlRect, 2)

Tento kód funguje, protože na platformách, které podporují zrcadlení, MapWindowPoints se upraví tak, aby při zrcadlení okna klienta prohodil souřadnice levého a pravého bodu. Další informace naleznete v části Poznámky MapWindowPoints.

Dalším běžným postupem, který může způsobit problémy se zrcadlenými okny, je umístění objektů v klientském okně pomocí posunů v souřadnicích obrazovky místo souřadnic klienta. Například následující kód používá rozdíl v souřadnicích obrazovky jako pozici x v souřadnicích klienta k umístění ovládacího prvku v dialogovém okně.

// OK if LTR layout and mapping mode of client is MM_TEXT,
// but WRONG for a mirrored dialog 

RECT rdDialog;
RECT rcControl;

HWND hControl = GetDlgItem(hDlg, IDD_CONTROL);
GetWindowRect(hDlg, &rcDialog);             // gets rect in screen coordinates
GetWindowRect(hControl, &rcControl);
MoveWindow(hControl,
           rcControl.left - rcDialog.left,  // uses x position in client coords
           rcControl.top - rcDialog.top,
           nWidth,
           nHeight,
           FALSE);

Tento kód je v pořádku, když má okno dialogového okna rozložení zleva doprava (LTR) a režim mapování klienta je MM_TEXT, protože nová pozice x v souřadnicích klienta odpovídá rozdílu v levých hranách ovládacího prvku a dialogu v souřadnicích obrazovky. V zrcadleném dialogovém okně jsou však obrácené doleva a doprava, takže místo toho byste měli použít MapWindowPoints následujícím způsobem:

RECT rcDialog;
RECT rcControl;

HWND hControl - GetDlgItem(hDlg, IDD_CONTROL);
GetWindowRect(hControl, &rcControl);

// MapWindowPoints works correctly in both mirrored and non-mirrored windows.
MapWindowPoints(NULL, hDlg, (LPPOINT) &rcControl, 2);

// Now rcControl is in client coordinates.
MoveWindow(hControl, rcControl.left, rcControl.top, nWidth, nHeight, FALSE)

Zrcadlení dialogových oken a polí zpráv

Dialogová okna a pole zpráv nedědí rozložení, takže musíte rozložení nastavit explicitně. Chcete-li zrcadlit okno zprávy, zavolejte MessageBox nebo MessageBoxEx s možností MB_RTLREADING. Chcete-li rozložení dialogového okna zprava doleva, použijte rozšířený styl WS_EX_LAYOUTRTL ve struktuře šablon dialogového okna DLGTEMPLATEEX. Seznamy vlastností jsou zvláštním případem dialogových oken. Každá karta se považuje za samostatné dialogové okno, takže musíte do každé karty, kterou chcete zrcadlit, zahrnout styl WS_EX_LAYOUTRTL.

Zrcadlení kontextu zařízení, které není přidružené k oknem

Řadiče domény, které nejsou přidruženy k oknem, jako je například metasoubor nebo řadiče domény tiskárny, nedědí rozložení, takže je nutné rozložení nastavit explicitně. Pokud chcete změnit rozložení kontextu zařízení, použijte funkci SetLayout.

Funkce SetLayout se zřídka používá s okny. Okna obvykle obdrží přidružený řadič domény pouze při zpracování WM_PAINT zprávy. Někdy program vytvoří řadič domény pro okno voláním GetDC. V obou směrech je počáteční rozložení řadiče domény nastaveno BeginPaint nebo GetDC podle příznaku WS_EX_LAYOUTRTL okna.

Hodnoty vrácené GetWindowOrgEx, GetWindowExtEx, GetViewportOrgEx a GetViewportExtEx nejsou ovlivněny voláním SetLayout.

Pokud je rozložení RTL, GetMapMode místo MM_TEXT vrátí MM_ANISOTROPIC. Volání SetMapMode s MM_TEXT bude fungovat správně; Ovlivněna je pouze návratová hodnota z GetMapMode. Podobně volání SetLayout(hdc, LAYOUT_RTL) při MM_TEXT režim mapování způsobí, že se ohlášený režim mapování změní na MM_ANISOTROPIC.

Zničení okna

Obecně platí, že aplikace musí zničit všechna okna, která vytvoří. Dělá to pomocí funkce DestroyWindow. Když je okno zničeno, systém skryje okno, pokud je viditelné, a pak odebere veškerá interní data přidružená k sadě. Tím se zneplatní popisovač okna, který už nemůže aplikace používat.

Aplikace zničí mnoho oken, která vytvoří brzy po jejich vytvoření. Aplikace například obvykle zničí okno dialogového okna, jakmile má aplikace dostatečný vstup od uživatele, aby pokračovala ve své úloze. Aplikace nakonec zničí hlavní okno aplikace (před ukončením).

Před zničením okna by aplikace měla uložit nebo odebrat všechna data spojená s oknem a měla by uvolnit všechny systémové prostředky přidělené pro toto okno. Pokud aplikace prostředky nevyvolá, systém uvolní všechny prostředky, které aplikace neuvolní.

Zničení okna nemá vliv na třídu okna, ze které je okno vytvořeno. Pomocí této třídy lze vytvářet nová okna a všechna existující okna této třídy budou nadále fungovat. Zničení okna také zničí potomky okna. Funkce DestroyWindow odešle nejprve do okna zprávu WM_DESTROY a potom do podřízených oken a následnických oken. Tímto způsobem jsou také zničena všechna následná okna okna, která jsou zničena.

Okno s nabídkou okna obdrží WM_CLOSE zprávu, když uživatel klikne na Zavřít. Při zpracování této zprávy může aplikace před zničením okna vyzvat uživatele k potvrzení. Pokud uživatel potvrdí, že by mělo být okno zničeno, může aplikace volat funkci DestroyWindow zničit okno.

Pokud je zničené okno aktivní, přenesou se aktivní i detailní stavy do jiného okna. Okno, které se stane aktivním oknem, je další okno určené kombinací kláves ALT+ESC. Nové aktivní okno pak určuje, které okno obdrží fokus klávesnice.