Sdílet prostřednictvím


Kontexty zařízení s privátním zobrazením

Kontext privátního zařízení aplikaci umožňuje vyhnout se načítání a inicializaci kontextu zobrazovaného zařízení pokaždé, když aplikace musí kreslit v okně. Kontexty privátního zařízení jsou užitečné pro okna, která vyžadují mnoho změn hodnot atributů kontextu zařízení k přípravě na výkres. Kontexty privátního zařízení zkracují dobu potřebnou k přípravě kontextu zařízení, a proto čas potřebný k provedení kreslení v okně.

Aplikace nasměruje systém k vytvoření soukromého kontextu zařízení pro okno zadáním stylu CS_OWNDC ve třídě okna. Systém vytvoří jedinečný kontext privátního zařízení pokaždé, když vytvoří nové okno, které patří do třídy. Kontext privátního zařízení má zpočátku stejné výchozí hodnoty pro atributy jako běžný kontext zařízení, ale aplikace je může kdykoli upravit. Systém zachovává změny kontextu zařízení po dobu životnosti okna nebo dokud aplikace provede další změny.

Aplikace může načíst popisovač kontextu privátního zařízení pomocí funkce GetDC kdykoli po vytvoření okna. Aplikace musí načíst popisovač pouze jednou. Poté může popisovač uchovávat a používat libovolný početkrát. Vzhledem k tomu, že kontext privátního zařízení není součástí mezipaměti kontextu zobrazení zařízení, nemusí aplikace nikdy uvolnit kontext zařízení pomocí funkce ReleaseDC.

Systém automaticky upraví kontext zařízení tak, aby odrážel změny okna, například přesunutí nebo změnu velikosti. Tím se zajistí, že všechna překrývající se okna budou vždy správně oříznuta; to znamená, že aplikace nevyžaduje žádnou akci k zajištění výřezu. Systém ale nereviduje kontext zařízení tak, aby zahrnoval oblast aktualizace. Proto při zpracování WM_PAINT zprávy musí aplikace začlenit oblast aktualizace voláním BeginPaint nebo načtením oblasti aktualizace a protínat ji s aktuální oblastí výřezu. Pokud aplikace nevolá BeginPaint, musí explicitně ověřit oblast aktualizace pomocí funkce ValidateRect nebo ValidateRgn. Pokud aplikace neověří oblast aktualizace, okno obdrží nekonečnou řadu WM_PAINT zpráv.

Protože BeginPaint skryje stříšku, pokud se zobrazí okno, aplikace, která volá BeginPaint by měla také volat funkci EndPaint obnovit stříšku. EndPaint nemá žádný jiný vliv na kontext privátního zařízení.

I když je kontext privátního zařízení vhodný pro použití, je náročný na paměť z hlediska systémových prostředků, což vyžaduje uložení 800 nebo více bajtů. Kontexty privátních zařízení se doporučují, když aspekty výkonu převáží náklady na úložiště.

Systém zahrnuje kontext privátního zařízení při odesílání zprávy WM_ERASEBKGND do aplikace. Aktuální výběr kontextu privátního zařízení, včetně režimu mapování, se projeví, když aplikace nebo systém tyto zprávy zpracuje. Aby se zabránilo nežádoucím účinkům, systém používá logické souřadnice při mazání pozadí; Například pomocí funkce GetClipBox načte logické souřadnice oblasti k vymazání a předá tyto souřadnice funkci FillRect. Aplikace, které tyto zprávy zpracovávají, mohou používat podobné techniky.

Aplikace může použít funkci GetDCEx k vynucení vrácení společného kontextu zařízení pro okno s kontextem privátního zařízení. To je užitečné pro rychlé dotykové ovládání okna beze změny aktuálních hodnot atributů soukromého kontextu zařízení.