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


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.

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.