Důležité informace o výkonu a osvědčené postupy
Toto téma představuje sadu osvědčených postupů pro používání rozhraní API Desktop Window Manageru (DWM).
Toto téma obsahuje následující části:
- Aplikační postupy pro DWM
- postupy kreslení pro DWM
- DWM Blur-Behind DWM oblasti klienta
Aplikační postupy pro DWM
Pokud vaše aplikace zpracovává body na palec (dpi), můžete deklarovat aplikaci jako s povědomím o dpi a zabránit automatickému škálování nastavením příznaku s povědomím o dpi v manifestu programu nebo voláním funkce SetProcessDPIAware při inicializaci programu.
Pokud je složení DWM zapnuté, zakryté aplikace již nedostávají zprávy WM_PAINT a nejsou vyzvány k opětovnému vykreslení. Obsah každého okna je již k dispozici pro vytvoření obrázku obrazovky.
Okna nejvyšší úrovně WS_EX_TRANSPARENT by měla být kombinována s WS_EX_LAYERED stylem pro účely testování hitů. WS_EX_TRANSPARENT v klasickém smyslu, bez přesměrování, je užitečný pro podřízená okna v hierarchii oken, která patří do stejného vlákna, ale není určený pro okna nejvyšší úrovně.
Pomocí oblastí nebo vrstvení můžete vytvářet tvarovaná nebo sloučená okna. Všimněte si, že v systému Windows Vista a novějších verzích systému Windows vykreslení pouze části okna nejvyšší úrovně nezobrazí očekávaný zastaralý obsah v nevykreslených oblastech.
K určení určitých skutečných hodnot lze použít rozhraní API, jako je GetDCOrgEx. Pokud máte kontext zařízení (DC) pro přesměrované okno, zdroj vrácený GetDCOrgEx nebude odpovídat původu okna na obrazovce. Původem bude místo toho plocha zadní vyrovnávací paměti pro vaše okno: (0, 0).
Pokud všechny ostatní selže, zakažte vykreslování oken voláním funkce DwmSetWindowAttribute.
Postupy kreslení pro DWM
Vyhněte se kreslení přímo na primární plochu displeje. Tím vynutíte, aby DWM zakázal kompozici, dokud vaše aplikace neuvolní plochu primárního zařízení.
Vyhodnoťte, jestli vaše aplikace musí poskytovat vlastní dvojité ukládání do vyrovnávací paměti. DWM efektivně používá dvojité vyrovnávání obsahu a zobrazuje okno v jediném snímku.
Vyhněte se čtení nebo zápisu do zobrazovacího zařízení. Ačkoli je to podporováno DWM, nedoporučujeme to kvůli poklesu výkonu.
Vyhněte se kreslení v neklientské oblasti. I když k této oblasti může aplikace přistupovat a kreslení je podporováno rozhraním API Microsoft Win32, může to způsobit, že okno ztratí jakékoli ohraničení skla, které má.
Vyhněte se kombinování rozhraní GDI (Windows Graphics Device Interface) a Microsoft DirectX, pokud se nepřekrývají. V případě potřeby míchání buď nakreslete obsah GDI do softwarové plochy DirectX a zkombinujte je před zobrazením na obrazovce, případně je můžete vykreslit do samostatných oken.
Pomocí funkce BitBlt nebo StretchBlt místo rozhraní GDI+ ve Windows můžete výkres prezentovat k vykreslení. GDI+ vykresluje jednu čáru skenování po druhé pomocí softwarového vykreslování. Toto může způsobit blikání v aplikacích.
DWM Blur-Behind Klientská oblast
Vykreslení efektu rozostření pozadí je operace náročná na prostředky pro procesor i grafický procesor (GPU). Vývojáři aplikací jsou vyzváni, aby zvážili důsledky použití rozostření oblasti klienta, aby nevyužívali nadměrné prostředky. V následujících případech byste měli postupovat opatrně:
- Pokud očekáváte, že rozostření klientské oblasti bude značné, i když se v rozmazané oblasti nebudou zobrazovat žádné aktualizace. Rozostření je třeba vykreslit v případě, že dojde k nějakým aktualizacím v rozmazané oblasti okna, což představuje náklady na procesor a GPU. Kromě toho operace s okny na okně (přesun, změna velikosti nebo přechody) přinesou zvýšené náklady.
- Pokud očekáváte významné aktualizace v rozmazané klientské oblasti. To bude vyžadovat překreslení rozostření při každé aktualizaci a spotřebovávat nadměrné prostředky.
- Pokud se očekává, že rozostření pokryje významnou oblast a také se očekávají aktualizace této oblasti, důrazně doporučujeme nerozostřit klientskou oblast.