DWM-összetétel engedélyezése és szabályozása
A Desktop Window Manager (DWM) összeállítási API-k számos funkciót biztosítanak a DWM által használt alapvető információk beállításához és lekérdezéséhez. Ezek az API-k lehetővé teszik a kompozíció állapotának lekérdezését és módosítását. Emellett beállíthatja és lekérdezheti a renderelési szabályzatot a különböző DWM-ablakattribútumokhoz.
Színezési információk lekérése
Az ablak nem ügyfélrégiójának színét az aktuális rendszerszín téma határozza meg. A színezés értékét a DWM API-k biztosítják, hogy az alkalmazás megfeleljen az ügyfél felhasználói felületének a rendszer színtémával.
A színezési érték eléréséhez és a színváltozás figyeléséhez használja a DwmGetColorizationColor függvényt és a WM_DWMCOLORIZATIONCOLORCHANGED üzenetet.
Ez a példa bemutatja, hogyan kezelheti a színt módosító üzenetet, és hogyan érheti el az új színt.
...
case WM_DWMCOLORIZATIONCOLORCHANGED:
{
DWORD newColorizationColor{ (DWORD)wParam };
BOOL isBlendedWithOpacity{ (BOOL)lParam };
}
break;
...
Nem ügyfélrégió renderelésének szabályozása
A DWM által lehetővé tesz két vizuális effektus az ablak nem ügyfélrégiójának átláthatósága és az áttűnési effektusok. Előfordulhat, hogy az alkalmazásnak le kell tiltania vagy újra engedélyeznie kell ezeket a effektusokat stílus- vagy kompatibilitási okokból. Az alábbi függvények az átláthatóság és az áttűnési effektusok viselkedésének kezelésére szolgálnak.
Ha le szeretné kérni egy alkalmazás ablakának aktuális nem ügyfél-renderelési állapotát, hívja meg DwmGetWindowAttributedwAttributeDWMWA_NCRENDERING_ENABLEDértékre. Amint a DWMWA_NCRENDERING_ENABLEDdokumentációjából látható, a DwmGetWindowAttribute jelölő átadásakor a lekért attribútum értéke BOOL. A különböző jelzők miatt DwmGetWindowAttribute különböző típusú értékeket ad vissza. Íme egy példa kódra.
BOOL isNCRenderingEnabled{ FALSE };
HRESULT hr = ::DwmGetWindowAttribute(hWnd,
DWMWA_NCRENDERING_ENABLED,
&isNCRenderingEnabled,
sizeof(isNCRenderingEnabled));
Ez a következő példa bemutatja, hogyan használhatja a DWMWA_EXTENDED_FRAME_BOUNDS jelzőt DwmGetWindowAttribute az ablak kiterjesztett kerethatárainak beolvasásához. A jelző dokumentációja azt jelzi, hogy a lekért attribútum értéke RECTtípusú.
RECT extendedFrameBounds{ 0,0,0,0 };
HRESULT hr = ::DwmGetWindowAttribute(hWnd,
DWMWA_EXTENDED_FRAME_BOUNDS,
&extendedFrameBounds,
sizeof(extendedFrameBounds));
Jegyzet
Kövesse ugyanazt a fenti programozási mintát, amikor meghívja DwmGetWindowAttribute a különböző attribútumok jelzőivel. A DWMWINDOWATTRIBUTE enumerálási témakör azt jelzi, hogy az egyes jelölők sorában milyen típusú értéket kell megadnia a pvAttribute paraméterben DwmGetWindowAttribute. A cbAttribute paraméter bájtban tartalmazza az objektum méretét.
DwmSetWindowAttribute lehetővé teszi az alkalmazás számára a nem ügyféloldali terület renderelési szabályzatának beállítását. Ez a függvény azt is meghatározza, hogy az alkalmazás hogyan kezelje a DWM-áttűnési effektusokat.
Ez a következő példa letiltja a nem ügyféloldali terület renderelését. Emiatt a DwmEnableBlurBehindWindow vagy a DwmExtendFrameIntoClientArea korábbi hívásai le lesznek tiltva.
HRESULT DisableNCRendering(HWND hWnd)
{
HRESULT hr = S_OK;
DWMNCRENDERINGPOLICY ncrp = DWMNCRP_DISABLED;
// Disable non-client area rendering on the window.
hr = ::DwmSetWindowAttribute(hWnd,
DWMWA_NCRENDERING_POLICY,
&ncrp,
sizeof(ncrp));
if (SUCCEEDED(hr))
{
// ...
}
return hr;
}
A nem ügyféloldali terület renderelésének szabályozása mellett a DwmSetWindowAttribute is szabályozhatja a DWM áttűnési effektusait. Az áttűnési viselkedést DWMWA_TRANSITIONS_FORCEDISABLEDdwAttribute paraméterrel állíthatja be.
Üzenetek
Az alábbi üzenetek a DWM-eseményekről nyújtanak értesítést. Ezek az üzenetek olyan változások monitorozására használhatók, mint a kompozíció állapota és a rendszer színtémája változásai.
- WM_DWMCOLORIZATIONCOLORCHANGED
- WM_DWMCOMPOSITIONCHANGED
- WM_DWMNCRENDERINGCHANGED
- WM_DWMWINDOWMAXIMIZEDCHANGE
DWM-kompozíció letiltása (Windows 7 és korábbi)
Figyelmeztetés
Az ebben a szakaszban szereplő információk csak a Windows 7 és korábbi rendszerekre vonatkoznak.
Mivel a DWM a grafikus feldolgozó egységet (GPU) használja az asztali összeállításhoz, előfordulhat, hogy az alkalmazásnak le kell tiltania a DWM-et a kompatibilitás érdekében. Azok az alkalmazások, amelyek teljes mértékben irányítják az asztalt, például a teljes képernyős módban futó játékokat, meg kell határozniuk, hogy a DWM engedélyezve van-e, és ha igen, tiltsa le. Ehhez két függvényre van szükség.
A DwmEnableCompositionhívása fEnable beállítással, amely DWM_EC_DISABLECOMPOSITION letiltja a DWM-kompozíciót, amíg a hívási folyamat le nem áll, vagy az összeállítás újra engedélyezve van DwmEnableComposition meghívásával fEnable beállítása DWM_EC_ENABLECOMPOSITION. A DWM-kompozíció automatikusan újraindul, amint a letiltott összetételű alkalmazások leálltak, vagy manuálisan újra engedélyezték a kompozíciót DwmEnableCompositionmeghívásával.
Jegyzet
A DWM automatikusan letiltja a kompozíciót, amikor egy alkalmazás közvetlenül az elsődleges megjelenítési felületre próbál rajzolni. A kompozíció mindaddig le lesz tiltva, amíg az alkalmazás nem bocsátja ki az elsődleges eszközfelületet.