Sdílet prostřednictvím


O rozhraní více dokumentů

Každý dokument v aplikaci s více dokumenty (MDI) se zobrazí v samostatném podřízeném okně v klientské oblasti hlavního okna aplikace. Mezi typické aplikace MDI patří aplikace pro zpracování textu, které uživateli umožňují pracovat s více textovými dokumenty a tabulkovými aplikacemi, které uživateli umožňují pracovat s více grafy a tabulkami. Další informace najdete v následujících tématech.

Rámové, klientské a dceřiná okna

Aplikace MDI má tři druhy oken: okno rámce, okno klienta MDI a také řadu podřízených oken. Okno rámečku je podobné hlavnímu oknu aplikace: má upravitelný rámeček, titulní lištu, nabídku okna, tlačítko pro minimalizaci a tlačítko pro maximalizaci. Aplikace musí pro okno rámečku zaregistrovat třídu okna a poskytnout postup pro jeho podporu.

Aplikace MDI nezobrazuje výstup v klientské oblasti okna rámce. Místo toho se zobrazí okno klienta MDI. Klientské okno MDI je speciální typ podřízeného okna, které patří k předregistrované třídě okna MDICLIENT. Klientské okno je podřízeným oknem rámcového okna; slouží jako pozadí pro podřízená okna. Poskytuje také podporu pro vytváření a manipulaci s podřízenými okny. Aplikace MDI může například vytvářet, aktivovat nebo maximalizovat podřízená okna odesláním zpráv do okna klienta MDI.

Když se uživatel otevře nebo vytvoří dokument, okno klienta pro dokument vytvoří podřízené okno. Klientské okno je nadřazené okno všech podřízených oken MDI v aplikaci. Každé podřízené okno má rám pro změnu velikosti, záhlaví, nabídku okna, tlačítko minimalizace a tlačítko maximalizace. Vzhledem k tomu, že je oříznuté podřízené okno, je omezeno na okno klienta a nemůže se zobrazit mimo něj.

Aplikace MDI může podporovat více než jeden druh dokumentu. Například typická tabulkové aplikace umožňuje uživateli pracovat s grafy i tabulkami. Pro každý typ dokumentu, který podporuje, musí aplikace MDI zaregistrovat podřízenou třídu okna a poskytnout proceduru okna pro podporu oken patřících této třídě. Další informace o třídách oken naleznete v tématu Třídy oken. Další informace o okenních procedurách naleznete v tématu Okenní procedury.

Následuje typická aplikace MDI. Jmenuje se Multipad.

Snímek obrazovky okna rámu aplikace MDI s více pady a okna klienta

Vytvoření podřízeného okna

Pokud chcete vytvořit podřízené okno, aplikace MDI buď volá funkci CreateMDIWindow, nebo odešle WM_MDICREATE zprávu do okna klienta MDI. Efektivnější způsob vytvoření podřízeného okna MDI je volání CreateWindowEx funkce, která určuje WS_EX_MDICHILD rozšířený styl.

Pokud chcete zničit podřízené okno, aplikace MDI odešle do okna klienta MDI zprávu WM_MDIDESTROY.

Aktivace dceřiného okna

V klientském okně se může kdykoli zobrazit libovolný počet podřízených oken, ale může být aktivní jenom jedno. Aktivní podřízené okno se umístí před všechna ostatní podřízená okna a jeho ohraničení se zvýrazní.

Uživatel může aktivovat neaktivní podřízené okno kliknutím. Aplikace MDI aktivuje podřízené okno odesláním WM_MDIACTIVATE zprávy do okna klienta MDI. Když okno klienta tuto zprávu zpracuje, odešle zprávu WM_MDIACTIVATE do okna procedury podřízeného okna, které se má aktivovat, a do procedury okna podřízeného okna, které se deaktivuje.

Chcete-li zabránit aktivaci podřízeného okna, zpracujte zprávu WM_NCACTIVATE určenou pro podřízené okno a vraťte FALSE.

Systém sleduje umístění každého podřízeného okna v zásobníku překrývajících se oken. Toto skládání se označuje jako Z-Order. Uživatel může aktivovat další podřízené okno v pořadí Z kliknutím na Další z nabídky okna v aktivním okně. Aplikace aktivuje další (nebo předchozí) podřízené okno v pořadí Z odesláním WM_MDINEXT zprávy do okna klienta.

Pro získání popisovače aktivního podřízeného okna aplikace MDI odešle zprávu WM_MDIGETACTIVE do okna klienta.

Více nabídek dokumentů

Okno rámce aplikace MDI by mělo obsahovat řádek nabídek s nabídkou okna. Nabídka okna by měla obsahovat položky, které uspořádávají podřízená okna v okně klienta nebo zavírají všechna podřízená okna. Nabídka okna typické aplikace MDI může obsahovat položky v následující tabulce.

Položka v menu Účel
dlaždice Uspořádá podřízená okna ve formátu dlaždice tak, aby se každá zobrazila v celém okně klienta.
Kaskádové Uspořádá podřízená okna v kaskádovém formátu. Podřízená okna se vzájemně překrývají, ale záhlaví každého z nich je viditelné.
Uspořádat ikony Uspořádá ikony minimalizovaných podřízených oken v dolní části okna klienta.
Zavřít všechny Zavře všechna podřízená okna.

Při každém vytvoření podřízeného okna systém automaticky připojí novou položku nabídky do nabídky okna. Text položky nabídky je stejný jako text na nabídkové liště nového dceřiného okna. Kliknutím na položku v nabídce může uživatel otevřít odpovídající podřízené okno. Když je podřízené okno zničeno, systém automaticky odstraní odpovídající položku z nabídky okna.

Systém může do nabídky okna přidat až deset položek nabídky. Po vytvoření desátého podřízeného okna systém přidá do nabídky okna položku Další okna. Po kliknutí na tuto položku se zobrazí dialogové okno Vybrat okno. Dialogové okno obsahuje seznam s názvy všech podřízených oken MDI, která jsou aktuálně k dispozici. Uživatel může aktivovat podřízené okno kliknutím na jeho název v seznamu.

Pokud vaše aplikace MDI podporuje několik typů podřízených oken, upravte řádek nabídek tak, aby odrážel operace spojené s aktivním oknem. Chcete-li to provést, zadejte samostatné prostředky nabídky pro každý typ podřízeného okna, které aplikace podporuje. Při aktivaci nového typu podřízeného okna by měla aplikace do okna klienta odeslat zprávu WM_MDISETMENU a předat mu popisovač odpovídající nabídky.

Pokud žádné podřízené okno neexistuje, řádek nabídek by měl obsahovat pouze položky použité k vytvoření nebo otevření dokumentu.

Když uživatel prochází nabídky aplikace MDI pomocí kurzorových kláves, klíče se chovají jinak než když uživatel prochází typickými nabídkami aplikace. V aplikaci MDI se řízení předává z nabídky okna aplikace do nabídky okna aktivního podřízeného okna a potom na první položku na nabídkovém pruhu.

Více dokumentových akcelerátorů

Pro příjem a zpracování akceleračních klíčů pro podřízená okna musí aplikace MDI zahrnovat funkci TranslateMDISysAccel ve smyčce zpráv. Smyčka musí volat TranslateMDISysAccel před tím, než zavolá funkci TranslateAccelerator nebo funkci DispatchMessage.

Klávesy akcelerátoru v nabídce okna MDI se liší od kláves pro ne-MDI podřízené okno. V podřízené okně MDI kombinace kláves ALT+ – (minus) otevře nabídku okna, kombinace kláves CTRL+F4 zavře aktivní podřízené okno a kombinace kláves CTRL+F6 aktivuje další podřízené okno.

Velikost a uspořádání podřízených oken

Aplikace MDI řídí velikost a umístění podřízených oken odesláním zpráv do okna klienta MDI. Aby se maximalizovalo aktivní podřízené okno, aplikace odešle do okna klienta zprávu WM_MDIMAXIMIZE. Když je podřízené okno maximalizované, jeho klientská oblast zcela vyplní okno klienta MDI. Kromě toho systém automaticky skryje záhlaví podřízeného okna a přidá ikonu nabídky podřízeného okna a tlačítko Obnovit do řádku nabídek aplikace MDI. Aplikace může obnovit okno klienta do původní (premaximizované) velikosti a umístění odesláním okna klienta WM_MDIRESTORE zprávu.

Aplikace MDI může uspořádat podřízená okna v kaskádovém nebo dlaždicovém formátu. Když jsou podřízená okna kaskádovitě uspořádána, okna se zobrazí ve formě stohu. Okno v dolní části zásobníku zabírá levý horní roh obrazovky a zbývající okna jsou svisle a vodorovně posunutá tak, aby bylo viditelné levé ohraničení a záhlaví každého podřízeného okna. Pokud chcete uspořádat podřízená okna v kaskádovém formátu, odešle aplikace MDI zprávu WM_MDICASCADE. Aplikace obvykle odešle tuto zprávu, když uživatel klikne na volbu Cascade v nabídce okna.

Když jsou podřízená okna uspořádána jako dlaždice, systém zobrazí každé podřízené okno v celé své ploše, aniž by se překrývala žádná okna. Všechna okna mají velikost podle potřeby tak, aby se vešla do okna klienta. Pokud chcete uspořádat podřízená okna ve formátu dlaždice, aplikace MDI odešle do okna klienta zprávu WM_MDITILE. Aplikace obvykle odešle tuto zprávu, když uživatel klikne na dlaždici v nabídce okna.

Aplikace MDI by měla poskytnout jinou ikonu pro každý typ podřízeného okna, které podporuje. Aplikace specifikuje ikonu při registraci třídy podřízeného okna. Systém automaticky zobrazí ikonu podřízeného okna v dolní části klientského okna, když je podřízené okno minimalizováno. Aplikace MDI směruje systém tak, aby uspořádal ikony podřízených oken odesláním WM_MDIICONARRANGE zprávy do okna klienta. Aplikace obvykle odešle tuto zprávu, když uživatel klikne na Uspořádat ikony v nabídce okna.

Název ikony Windows

Vzhledem k tomu, že podřízená okna MDI mohou být minimalizována, musí se aplikace MDI vyhnout manipulaci s okny s názvy ikon, jako by byla normální podřízená okna MDI. Když aplikace vyjmenuje podřízená okna klientského okna MDI, zobrazí se okna s názvy ikon. Okenní tituly ikon se liší od ostatních podřízených oken tím, že jsou vlastněny podřízeným oknem MDI.

Pokud chcete zjistit, jestli je podřízené okno s názvem ikony, použijte funkci GetWindow s indexem GW_OWNER. Okna bez názvu vracejí NULL. Všimněte si, že tento test není dostatečný pro okna nejvyšší úrovně, protože nabídky a dialogová okna jsou vlastněna okna.

Data podřízeného okna

Vzhledem k tomu, že počet podřízených oken se liší v závislosti na tom, kolik dokumentů uživatel otevře, musí být aplikace MDI schopná přidružit data (například název aktuálního souboru) ke každému podřízeného okně. Můžete to udělat dvěma způsoby:

  • Uložte data podřízeného okna ve struktuře okna.
  • Použijte vlastnosti okna.

Struktura okna

Když aplikace MDI zaregistruje třídu okna, může rezervovat nadbytečné místo ve struktuře okna pro data aplikace specifická pro tuto konkrétní třídu oken. K ukládání a načítání dat v tomto dodatečném prostoru aplikace používá funkce GetWindowLong a SetWindowLong.

Aby bylo možné udržovat velké množství dat pro podřízené okno, může aplikace přidělit paměť pro datovou strukturu a pak uložit popisovač paměti obsahující strukturu do volného prostoru přidruženého k podřízenému oknu.

Vlastnosti okna

Aplikace MDI může také ukládat data jednotlivých dokumentů pomocí vlastností okna. Data související s dokumentem jsou data specifická pro typ dokumentu obsaženého v konkrétním podřízeném okně. Vlastnosti se liší od nadbytečného místa ve struktuře okna, ve které při registraci třídy okna nepotřebujete přidělit nadbytečné místo. Okno může mít libovolný počet vlastností. Také tam, kde se používají offsety pro přístup k dodatečnému prostoru ve strukturách oken, jsou vlastnosti odkazovány pomocí názvů řetězců. Další informace o vlastnostech okna naleznete v tématu Vlastnosti okna.