Megosztás a következőn keresztül:


Privát megjelenítési eszközkörnyezetek

A privát eszközkörnyezet lehetővé teszi az alkalmazás számára, hogy elkerülje a megjelenítési eszköz környezetének beolvasását és inicializálását minden alkalommal, amikor az alkalmazásnak egy ablakban kell rajzolnia. A privát eszközkörnyezetek olyan ablakok esetében hasznosak, amelyek az eszközkörnyezet attribútumainak számos módosítását igénylik a rajzhoz való előkészítéshez. A privát eszközkörnyezetek csökkentik az eszközkörnyezet előkészítéséhez szükséges időt, ezért az ablakban való rajzoláshoz szükséges időt.

Az alkalmazások az ablakosztály CS_OWNDC stílusának megadásával arra utasítják a rendszert, hogy hozzon létre egy privát eszközkörnyezetet egy ablakhoz. A rendszer minden alkalommal létrehoz egy egyedi privát eszközkörnyezetet, amikor új ablakot hoz létre az osztályhoz. A privát eszköz környezete kezdetben ugyanazokat az alapértelmezett értékeket tartalmazza az attribútumokhoz, mint egy közös eszközkörnyezet, de az alkalmazás bármikor módosíthatja ezeket. A rendszer megőrzi az eszközkörnyezet módosításait az ablak élettartama alatt, vagy amíg az alkalmazás további módosításokat nem végez.

Az alkalmazások az ablak létrehozása után bármikor lekérhetnek egy leírót a privát eszköz környezetéhez a GetDC függvénnyel. Az alkalmazásnak csak egyszer kell lekérnie a leírót. Ezt követően tetszőleges számú alkalommal megtarthatja és használhatja a fogópontot. Mivel a privát eszközkörnyezet nem része a megjelenítési eszközkörnyezet gyorsítótárának, az alkalmazásnak soha nem kell felszabadítania az eszközkörnyezetet a ReleaseDC függvénnyel.

A rendszer automatikusan úgy állítja be az eszközkörnyezetet, hogy tükrözze az ablak változásait, például az áthelyezést vagy a méretezést. Ez biztosítja, hogy az átfedésben lévő ablakok mindig megfelelően legyenek kivágva; vagyis az alkalmazás nem igényel műveletet a kivágás biztosításához. A rendszer azonban nem módosítja az eszközkörnyezetet úgy, hogy az tartalmazza a frissítési régiót. Ezért egy WM_PAINT üzenet feldolgozásakor az alkalmazásnak tartalmaznia kell a frissítési régiót a BeginPaint meghívásával vagy a frissítési régió beolvasásával és az aktuális kivágási régióval való metszetével. Ha az alkalmazás nem hívja meg BeginPaint, explicit módon kell érvényesítenie a frissítési régiót a ValidateRect vagy ValidateRgn függvénnyel. Ha az alkalmazás nem ellenőrzi a frissítési régiót, az ablak végtelen számú WM_PAINT üzenetet kap.

Mivel BeginPaint elrejti a gondviselőt, ha egy ablak jelenik meg, egy BeginPaint hívó alkalmazásnak a EndPaint függvényt is meg kell hívnia a gondozás visszaállításához. EndPaint nincs más hatása a privát eszközkörnyezetre.

Bár a privát eszközök környezete kényelmesen használható, memóriaigényes a rendszererőforrások szempontjából, ezért 800 vagy több bájt tárolására van szükség. A privát eszközkörnyezetek akkor ajánlottak, ha a teljesítmény szempontjai meghaladják a tárolási költségeket.

A rendszer tartalmazza a privát eszközkörnyezetet, amikor elküldi a WM_ERASEBKGND üzenetet az alkalmazásnak. A privát eszköz környezetének aktuális kijelölései, beleértve a leképezési módot is, akkor lépnek érvénybe, amikor az alkalmazás vagy a rendszer feldolgozza ezeket az üzeneteket. A nemkívánatos hatások elkerülése érdekében a rendszer logikai koordinátákat használ a háttér törlésekor; Például a GetClipBox függvénnyel kéri le a terület logikai koordinátáit, hogy törölje és átadja ezeket a koordinátákat a FillRect függvénynek. Az üzeneteket feldolgozó alkalmazások hasonló technikákat használhatnak.

Az alkalmazások a GetDCEx függvénnyel kényszeríthetik a rendszert arra, hogy a privát eszközkörnyezettel rendelkező ablak közös eszközkörnyezetét adja vissza. Ez akkor hasznos, ha gyors érintéseket hajt végre egy ablakban anélkül, hogy módosítaná a magáneszköz-környezet attribútumainak aktuális értékeit.