Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A többdokumentumos felület (MDI) alkalmazás minden dokumentuma külön gyermekablakban jelenik meg az alkalmazás főablakának ügyfélterületén belül. A tipikus MDI-alkalmazások közé tartoznak a szövegszerkesztő alkalmazások, amelyek lehetővé teszik a felhasználó számára, hogy több szöveges dokumentumot használjon, valamint olyan számolótábla-alkalmazásokat, amelyek lehetővé teszik, hogy a felhasználó több diagrammal és számolótáblával dolgozzon. További információkért tekintse meg az alábbi témaköröket.
- Keret, Kliens és Gyermek ablakok
- gyermekablak létrehozása
- gyermekablak aktiválása
- több dokumentummenü
- több dokumentumgyorsító
- gyermekablak mérete és elrendezése
- Ikon Cím Windows
- gyermekablak adat
Keret, ügyfél és gyermek ablakok
Az MDI-alkalmazásoknak háromféle ablakuk van: keretablak, MDI-ügyfélablak, valamint számos gyermekablak. A keretablak az alkalmazás főablakához hasonló: van egy méretezőszegélye, egy címsora, egy ablakmenüje, egy kicsinyítés gombja és egy nagyítás gombja. Az alkalmazásnak regisztrálnia kell egy ablakosztályt a keretablakhoz, és meg kell adnia egy ablakeljárást a támogatásához.
Az MDI-alkalmazások nem jelenítik meg a kimenetet a keretablak ügyfélterületén. Ehelyett megjeleníti az MDI-ügyfélablakot. Az MDI-ügyfélablak egy speciális gyermekablaktípus, amely az MDICLIENT előre regisztrált ablakosztályhoz tartozik. A kliensablak a keretablak gyermekablaka; ez funkcionál a gyermekablakok háttereként. Emellett támogatja a gyermekablakok létrehozását és manipulálását is. Egy MDI-alkalmazás például létrehozhat, aktiválhat vagy maximalizálhat gyermekablakokat az MDI-ügyfélablakba küldött üzenetek küldésével.
Amikor a felhasználó megnyit vagy létrehoz egy dokumentumot, az ügyfélablak létrehoz egy gyermekablakot a dokumentumhoz. Az ügyfélablak az alkalmazás összes MDI gyermekablakának szülőablaka. Minden gyermekablakhoz méretezőszegély, címsor, ablakmenü, kis méret gomb és teljes méret gomb tartozik. Mivel a gyermekablak ki van vágva, az ügyfélablakra korlátozódik, és nem jelenik meg rajta kívül.
Az MDI-alkalmazások több dokumentumtípust is támogatnak. Egy tipikus számolótábla-alkalmazás például lehetővé teszi, hogy a felhasználó diagramokkal és számolótáblákkal is dolgozzon. Az MDI-alkalmazásoknak minden támogatott dokumentumtípushoz regisztrálniuk kell egy gyermekablak-osztályt, és ablakeljárást kell biztosítaniuk az adott osztályhoz tartozó ablakok támogatásához. További információ az ablakosztályokról: Ablakosztályok. További információ az ablakeljárásokról: Ablakeljárások.
A következő egy tipikus MDI-alkalmazás. Multipadnak hívják.
Gyermekablak létrehozása
Gyermekablak létrehozásához egy MDI-alkalmazás meghívja a CreateMDIWindow függvényt, vagy elküldi a WM_MDICREATE üzenetet az MDI-ügyfélablakba. Az MDI gyermekablakok létrehozásának hatékonyabb módja, ha meghívja a CreateWindowEx függvényt, megadva a WS_EX_MDICHILD bővített stílust.
Gyermekablak elpusztításához egy MDI-alkalmazás WM_MDIDESTROY üzenetet küld az MDI-ügyfélablaknak.
Gyermekablak aktiválása
Az ügyfélablakban egyszerre tetszőleges számú gyermekablak jelenhet meg, de csak egy lehet aktív. Az aktív gyermekablak az összes többi gyermekablak előtt helyezkedik el, és a szegélye ki van emelve.
A felhasználó kattintással aktiválhat egy inaktív gyermekablakot. Az MDI-alkalmazás egy WM_MDIACTIVATE üzenetet küldve aktiválja a gyermekablakot az MDI-ügyfélablaknak. Ahogy az ügyfélablak feldolgozza ezt az üzenetet, egy WM_MDIACTIVATE üzenetet küld az aktiválni kívánt gyermekablak ablakműveletének és az inaktivált gyermekablak ablakeljárásának.
Ha meg szeretné akadályozni egy gyermekablak aktiválását, kezelje a gyermekablakba érkező WM_NCACTIVATE üzenetet FALSEvisszatérésével.
A rendszer nyomon követi az egyes gyermekablakok helyzetét az átfedésben lévő ablakok halmában. Ezt a halmozást Z-Ordernéven ismerjük. A felhasználó aktiválhatja a következő gyermekablakot a Z sorrendben, ha az aktív ablak ablak menüjében a következő Tovább gombra kattint. Az alkalmazás küld egy WM_MDINEXT üzenetet a kliens ablaknak, hogy aktiválja a következő (vagy előző) gyermekablakot a Z sorrendben.
Ha le szeretné kérni az aktív gyerekablak leírót, az MDI-alkalmazás WM_MDIGETACTIVE üzenetet küld az ügyfélablaknak.
Több dokumentummenü
Az MDI-alkalmazások keretablakának tartalmaznia kell egy ablakmenüvel rendelkező menüsávot. Az ablakmenünek tartalmaznia kell azokat az elemeket, amelyek az ügyfélablakban rendezik a gyermekablakokat, vagy amelyek bezárják az összes gyermekablakot. Egy tipikus MDI-alkalmazás ablakmenüje az alábbi táblázatban szereplő elemeket is tartalmazhatja.
| Menüpont | Cél |
|---|---|
| Csempe | A gyermekablakokat csempeformátumban rendezi el, így mindegyik teljes egészében megjelenik az ügyfélablakban. |
| Kaszkád | A gyermekablakokat kaszkádolt formátumban rendezi el. A gyermekablakok átfedésben vannak egymással, de mindegyik címsora látható. |
| Ikonok elrendezése | A kis méretű gyermekablakok ikonjait az ügyfélablak alján rendezi el. |
| Az összes bezárása | Bezárja az összes gyermekablakot. |
Gyermekablak létrehozásakor a rendszer automatikusan hozzáfűz egy új menüelemet az ablakmenühöz. A menüelem szövege megegyezik az új gyermekablak menüsorának szövegével. A menüelemre kattintva a felhasználó aktiválhatja a megfelelő gyermekablakot. Ha egy gyermekablak megsemmisül, a rendszer automatikusan eltávolítja a megfelelő menüelemet az ablak menüjéből.
A rendszer legfeljebb tíz menüelemet adhat hozzá az ablakmenühöz. A tizedik gyermekablak létrehozásakor a rendszer hozzáadja a További Windows elemet az ablak menüjéhez. Erre az elemre kattintva megjelenik az Ablak kijelölése párbeszédpanel. A párbeszédpanel tartalmaz egy listamezőt, amely az összes jelenleg elérhető MDI gyermekablak címét tartalmazza. A felhasználó a listában a címére kattintva aktiválhatja a gyermekablakot.
Ha az MDI-alkalmazás számos gyermekablaktípust támogat, a menüsávot úgy alakíthatja ki, hogy tükrözze az aktív ablakhoz társított műveleteket. Ehhez adjon meg külön menüerőforrásokat minden olyan gyermekablakhoz, amit az alkalmazás támogat. Új típusú gyerekablak aktiválásakor az alkalmazásnak egy WM_MDISETMENU üzenetet kell küldenie az ügyfélablaknak, átadva neki a megfelelő menü leíróját.
Ha nincs gyermekablak, a menüsávnak csak a dokumentum létrehozásához vagy megnyitásához használt elemeket kell tartalmaznia.
Ha a felhasználó kurzorbillentyűkkel navigál egy MDI-alkalmazás menüjében, a kulcsok másképp viselkednek, mint amikor a felhasználó egy tipikus alkalmazás menüjében navigál. Egy MDI-alkalmazásban a vezérlő az alkalmazás ablakmenüjéből az aktív gyermekablak ablakmenüjéhez, majd a menüsor első eleméhez jut el.
Több dokumentumgyorsító
A gyermekablakok gyorsítókulcsainak fogadásához és feldolgozásához az MDI-alkalmazásoknak tartalmazniuk kell a TranslateMDISysAccel függvényt az üzenethurkában. A huroknak meg kell hívnia a TranslateMDISysAccel függvényt, mielőtt meghívná a TranslateAccelerator vagy a DispatchMessage függvényt.
Az MDI gyermekablak ablakmenüjének gyorsítókulcsai eltérnek a nem MDI gyermekablakokétól. Egy MDI gyermekablakban az ALT+ – (mínusz) billentyűkombináció megnyitja az ablak menüjét, a CTRL+F4 billentyűkombináció bezárja az aktív gyermekablakot, a CTRL+F6 billentyűkombináció pedig aktiválja a következő gyermekablakot.
Gyermekablak mérete és elrendezése
Az MDI-alkalmazások az MDI-ügyfélablakba küldött üzenetek küldésével vezérlik a gyermekablakok méretét és helyzetét. Az aktív gyermekablak maximalizálása érdekében az alkalmazás elküldi a WM_MDIMAXIMIZE üzenetet az ügyfélablakba. Amikor egy gyermekablak maximalizált, az ügyfélterülete teljesen kitölti az MDI-ügyfélablakot. Emellett a rendszer automatikusan elrejti a gyermekablak címsorát, és hozzáadja a gyermekablak ablakmenü ikonját és a Visszaállítás gombot az MDI-alkalmazás menüsávjához. Az alkalmazás visszaállíthatja az ügyfélablakot az eredeti (premaximizált) méretére és pozíciójára, ha WM_MDIRESTORE üzenetet küld az ügyfélablaknak.
Az MDI-alkalmazások kaszkádolt vagy csempeformátumban rendezhetik a gyermekablakokat. Ha a gyermekablakok kaszkádozva vannak, az ablakok egymás fölött jelennek meg. A verem alján lévő ablak a képernyő bal felső sarkát foglalja el, a fennmaradó ablakokat függőlegesen és vízszintesen eltolva, hogy az egyes gyermekablakok bal oldali szegélye és címsora látható legyen. Ha kaszkádolt formátumban szeretné elrendezni a gyermekablakokat, egy MDI-alkalmazás elküldi a WM_MDICASCADE üzenetet. Az alkalmazás általában akkor küldi el ezt az üzenetet, ha a felhasználó az ablak menüjében Kaszkádolt gombra kattint.
Amikor a gyermekablakok csempézve vannak, a rendszer az egyes gyermekablakokat teljes egészében jeleníti meg, úgy, hogy egyik ablak sem fed át másikat. Az összes ablak szükség szerint méretezhető, hogy elférjen az ügyfélablakban. A gyermekablakok csempeformátumban való elrendezéséhez egy MDI-alkalmazás WM_MDITILE üzenetet küld az ügyfélablaknak. Az alkalmazás általában akkor küldi el ezt az üzenetet, ha a felhasználó az ablak menüjében Csempe elemre kattint.
Az MDI-alkalmazásoknak minden támogatott gyermekablakhoz más ikont kell megadniuk. Az alkalmazás egy ikont ad meg a gyermekablak-osztály regisztrálásakor. A rendszer automatikusan megjeleníti az alablak ikonját az ügyfélablak alsó részén, amikor az alablak kicsinyítve van. Egy MDI-alkalmazás egy WM_MDIICONARRANGE üzenet küldésével utasítja a rendszert a gyermekablak ikonjainak elrendezésére. Az alkalmazás általában akkor küldi el ezt az üzenetet, ha a felhasználó az ablak menüjében Ikonok elrendezése gombra kattint.
Ikon címe Windows
Mivel az MDI gyermekablakai minimálisra csökkenthetők, az MDI-alkalmazásoknak kerülniük kell az ikoncímablakok úgy való manipulálását, mintha normál MDI gyermekablakok lennének. Az ikoncímablakok akkor jelennek meg, amikor az alkalmazás számbaveszi az MDI-ügyfélablak gyermekablakait. Az ikoncímablakok azonban eltérnek a többi gyermekablaktól, mivel azokat egy MDI gyermekablak birtokolja.
Annak megállapításához, hogy a gyermekablak ikoncímablak-e, használja a GetWindow függvényt a GW_OWNER indexel. A nem címbeli ablakok NULLértéket ad vissza. Vegye figyelembe, hogy ez a teszt nem elegendő a legfelső szintű ablakokhoz, mert a menük és párbeszédpanelek saját ablakok.
Gyermekablak adatai
Mivel a gyermekablakok száma attól függően változik, hogy hány dokumentumot nyit meg a felhasználó, az MDI-alkalmazásoknak képesnek kell lenniük az adatok (például az aktuális fájl neve) társítására az egyes gyermekablakokhoz. Ezt kétféleképpen teheti meg:
- Gyermekablak-adatok tárolása az ablakszerkezetben.
- Használja az ablaktulajdonságokat.
Ablakszerkezet
Amikor egy MDI-alkalmazás regisztrál egy ablakosztályt, az az adott ablakosztályra vonatkozó alkalmazásadatok számára további helyet foglalhat az ablakszerkezetben. Az adatok ezen a plusz helyen való tárolásához és lekéréséhez az alkalmazás a GetWindowLong és SetWindowLong függvényt használja.
Ha nagy mennyiségű adatot szeretne tárolni egy gyermekablakhoz, az alkalmazás lefoglalhat memóriát egy adatstruktúra számára, majd a memóriát tartalmazó struktúra leíróját a gyermekablakhoz társított extra térben tárolhatja.
Ablak beállításai
Az MDI-alkalmazások az ablaktulajdonságok használatával dokumentumonkénti adatokat is tárolhatnak. dokumentumonkénti adatok az adott gyermekablakban található dokumentum típusára jellemző adatok. A tulajdonságok abban különböznek az ablakstruktúrában lévő plusz helytől, hogy az ablakosztály regisztrálásakor nem szükséges plusz helyet foglalni. Az ablakok tetszőleges számú tulajdonsággal rendelkezhetnek. Továbbá, ahol az eltolások az ablakszerkezetek extra helyének elérésére szolgálnak, a tulajdonságok szöveges nevekként vannak megadva. Az ablaktulajdonságokról további információt Ablak tulajdonságaicímű témakörben talál.