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.
Jegyzet
Windows 10-es alkalmazások esetén a DirectComposition helyett a Windows.UI.Composition API-kat javasoljuk. További információ: Asztali alkalmazás modernizálása a Visual layerhasználatával.
Ez a témakör a Microsoft DirectComposition által támogatott felülettípusok típusait ismerteti.
- DirectComposition logikai felületi
-
DirectComposition virtuális felületi
- virtuális felület átméretezése
- Virtuális felület levágása
- Kapcsolódó témakörök
DirectComposition logikai felület
A DirectComposition az IDCompositionSurface objektumot teszi elérhetővé, hogy logikai kompozíciós felületet jelöljön. A DirectComposition olyan API-kat tesz elérhetővé, amelyekkel létrehozhatja, frissítheti és törölheti ezeket a logikai felületeket. Minden felület társítható egy vagy több vizualizációhoz. Az alkalmazás felelős a logikai felületek élettartamának kezeléséért.
Logikai felület frissítése
Az alkalmazások a BeginDraw meghívásával és az alkalmazás által frissíteni kívánt logikai felületen lévő téglalap méretének és eltolásának megadásával frissíthetik a logikai felületet. A DirectComposition egy megadott méretű téglalapot foglal le, majd visszaadja a felületet és a megfelelő eltolást, amelyet az alkalmazásnak meg kell rajzolnia vagy frissítenie. A frissítési téglalap korlátait a felület mérete köti össze. Egy 40–100 képpontos felület frissítési téglalapja például akár (0,0,40 100) is lehet. Emellett a frissíthető régiót egy védő téglalap is kényszeríti. Mivel egyszerre csak egy védő téglalap lehet, egyszerre csak egy logikai felület frissíthető. BeginDraw hibakódot ad vissza, ha EndDraw vagy SuspendDraw nem lett meghívva a BeginDraw korábbi hívása után. Az alkalmazások véglegesített hívást adhatnak BeginDraw egy köteghez, de csak akkor lépnek érvénybe, ha EndDraw meghívása és véglegesítése megtörténik.
Frissítések felfüggesztése logikai felületre
A különböző felületek frissítésére szoruló alkalmazások meghívhatják SuspendDraw az aktuális frissítésen, majd meghívhatják BeginDraw egy új frissítés indításához. A Microsoft DirectComposition több frissítést is lehetővé tesz, de egyszerre csak egy lehet aktív. Ez azt jelenti, hogy SuspendDraw vagy EndDraw kell meghívnia egy felületen, mielőtt meghívja BeginDraw a következőre. Ellentétben EndDraw, a véglegesített köteg tartalmazhat egy felületet, amely SuspendDraw állapotban van, de ezek a frissítések csak akkor jelennek meg a képernyőn, ha EndDraw meghívják.
Frissítések folytatása logikai felületre
Az alkalmazások ResumeDrawmeghívásával folytathatják a SuspendDraw állapotú felület frissítését. Ez a módszer csak felfüggesztett felületen hívható meg.
Logikai felület frissítéseinek befejezése
A EndDraw és Véglegesítés meghívása az egyetlen módja annak, hogy a bitképfrissítés változásai megjelenjenek a képernyőn. Az EndDraw hívásainak megfelelő hívással kell rendelkezniük, hogy BeginDraw távolítsa el az védő téglalapot. A logikai felület mindaddig megőrzi az összes frissítést, amíg Véglegesítési nem lesz meghívva. A EndDraw is meghívható a SuspendDraw állapotú felületen, mert EndDraw hallgatólagos folytatás/befejezés. Miután meghívta EndDraw, a frissített tartalom megjelenik a képernyőn, és el lesz vetve, hogy a frissítés memóriája újra felhasználható legyen egy későbbi frissítéshez.
Példa logikai felület használatára
Az alábbi példa azokat a lépéseket ismerteti, amelyeket egy alkalmazás akkor hajtana végre, ha két vizualizációból álló vizualizációfát hozna létre, majd frissítenie kell a vizualizációkhoz társított két logikai felület adott régióit:
- DirectComposition-eszköz létrehozása.
- Hozza létre a gyökércsomópontból és az 1. és 2. vizualizációból álló vizualizációfát.
- Logikai felületek létrehozása 1 és 2.
- Hívja meg SetContent, hogy logikai felületet társítson az 1. és a 2. vizualizációhoz.
- Hívja meg BeginDraw az 1. logikai felület egy al téglalapján.
- Frissítse a felületet a DirectComposition által visszaadott eltolásnál.
- Választható lépések:
- Hívás SuspendDraw logikai felületen 1.
- Hívja meg BeginDraw a 2. logikai felület alsüllyedésén.
- Frissítse a felületet a DirectComposition által visszaadott eltolásnál.
- Hívja meg EndDraw logikai felületen 2.
- Hívja meg ResumeDraw logikai felületen 1.
- Frissítse a felületet a DirectComposition által visszaadott eltolásnál.
- Hívja meg EndDraw logikai felületen 1.
- Hívás véglegesítési.
DirectComposition virtuális felület
A DirectComposition elérhetővé teszi az IDCompositionVirtualSurface felületet, amely egy virtuális felületet jelöl, amely egy rögzített rácsba rendezett, rögzített méretű csempékkel rendelkező logikai felületek (csempék) gyűjteménye. Az alkalmazás meghatározza a virtuális anyagminta méretét a létrehozáskor. A méret meghatározza a virtuális felület határait. A felület egy vagy több vizualizációhoz társítható.
A virtuális felület inicializálásakor a rendszer nem a tényleges foglalások alapján végzi el az inicializálást. Más szóval nem tart biteket. A DirectComposition lefoglalja a csempéket (azaz a kompozíció felületi objektumait), miután az alkalmazás megkezdte a felület frissítését. Az alkalmazás a BeginDraw meghívásával frissíti a virtuális felületet, és megadja a virtuális felület koordinátái szempontjából fontos régiót. Ezután a DirectComposition lefoglalja a frissítés tárolásához szükséges csempéket, és visszaadja a kompozíció felületét és az eltolást a frissítéshez.
A logikai felületekhez hasonlóan meghívhatja BeginDraw, SuspendDraw, ResumeDraw és EndDraw virtuális felületen. A DirectComposition emellett olyan módszereket is elérhetővé tesz, amelyekkel átméretezheti és levághatja a meglévő virtuális felületet.
Virtuális felület átméretezése
A Átméretezés metódus megváltoztatja a virtuális felület határait, ami azt jelenti, hogy az új frissítéseknek vagy foglalásoknak az új méret által meghatározott határokba kell esniük. Az alkalmazások Átméretezés használatával közlik a DirectComposition-nak, hogy a virtuális felület egy adott régiójára már nincs szükség, és visszavonható. Ha Átméretezés zsugorítja a virtuális felületet, az alkalmazás már nem tudja frissíteni az új határokon kívüli régiókat.
Az alábbi ábrán egy 3-by-3 virtuális felület látható, amely 2-ről 2-re van átméretezve. A piros régió az átméretezési művelet részeként elvetett csempéket jelöli, a memóriát pedig a DirectComposition visszanyeri. Az átméretezés után az alkalmazás nem tud frissítéseket végezni a vörös régióban anélkül, hogy újra átméretezi a virtuális felületet.
virtuális felület átméretezése 
Az átméretezési művelet azonnal érvénybe lép. A DirectComposition nem várja meg, amíg az alkalmazás meghívja Véglegesítési az átméretezés frissítéséhez. Tegyük fel például, hogy egy alkalmazás a következő hívássorozatot hajtja végre.
pVirtualSurface->Resize(0, 0);
pVirtualSurface->Resize(INT_MAX, INT_MAX);
pDevice->Commit();
Ebben a példában az alkalmazás az első átméretezéskor elveszíti az összes tartalmat. A második átméretezésnek nincs hatása annak ellenére, hogy az Véglegesítéselőtt lett meghívva. Ebben az esetben semmi sem jelenik meg a képernyőn.
Virtuális felület vágása
A Trim metódus azonosítja az alkalmazás által igényelt virtuális felület régióját. Nem méretezi át a virtuális felület határait, de közli a DirectComposition-nak, hogy jelenleg mely logikai felületeket kell lefoglalni.
Az alábbi ábrán a zöld négyzet az alkalmazás nézetportja. Az alkalmazás kezdetben a virtuális felület első hat csempéjére (kék) jelenik meg (világosszürke), amelyek a nézetablakban találhatók. Ahogy a virtuális felület görgeti az oldalt, az alkalmazásnak az utolsó hat csempét kell megjelenítenie. Az alkalmazás meghívja Trim, hogy jelezze, hogy az utolsó hat csempe által meghatározott régió a tartalom helye, a többire pedig jelenleg nincs szükség. A DirectComposition ezután dönthet úgy, hogy újrahasznosítja az eredetileg az első hat csempét (sötétszürke) ábrázoló logikai felületeket.
Kapcsolódó témakörök