DWM-samenstelling inschakelen en beheren
De DWM-samenstellings-API's (Desktop Window Manager) bieden verschillende functies voor het instellen en opvragen van basisinformatie die door de DWM wordt gebruikt. Met deze API's kunt u de samenstellingsstatus opvragen en wijzigen. Daarnaast kunt u het renderingbeleid voor verschillende DWM-vensterkenmerken instellen en er query's op uitvoeren.
Kleurinformatie ophalen
De kleur van het niet-clientgebied van een venster wordt bepaald door het huidige systeemkleurthema. De kleurwaarde wordt geleverd via de DWM-API's om uw toepassing in staat te stellen de clientgebruikersinterface te koppelen aan het systeemkleurthema.
Als u deze kleurwaarde wilt openen en de kleurwijziging wilt controleren, gebruikt u de functie DwmGetColorizationColor en het WM_DWMCOLORIZATIONCOLORCHANGED bericht.
In dit voorbeeld ziet u hoe u het bericht met gewijzigde kleur kunt afhandelen en hoe u de nieuwe kleur kunt openen.
...
case WM_DWMCOLORIZATIONCOLORCHANGED:
{
DWORD newColorizationColor{ (DWORD)wParam };
BOOL isBlendedWithOpacity{ (BOOL)lParam };
}
break;
...
Rendering van niet-clientregio's beheren
Twee van de visuele effecten die DWM mogelijk maakt, zijn transparantie van de niet-clientregio van een venster en overgangseffecten. Mogelijk moet uw toepassing deze effecten om stijl- of compatibiliteitsredenen uitschakelen of opnieuw inschakelen. De volgende functies worden gebruikt om het gedrag van transparantie en overgangseffect te beheren.
Als u de huidige niet-clientrenderingsstatus voor het venster van een toepassing wilt ophalen, roept u DwmGetWindowAttribute- aan met dwAttribute- ingesteld op DWMWA_NCRENDERING_ENABLED. Zoals u kunt zien in de documentatie voor DWMWA_NCRENDERING_ENABLED, is de opgehaalde kenmerkwaarde van het type BOOL-wanneer u die vlag doorgeeft aan DwmGetWindowAttribute-. Verschillende vlaggen zorgen ervoor dat DwmGetWindowAttribute- waarden van verschillende typen retourneert. Hier volgt een codevoorbeeld.
BOOL isNCRenderingEnabled{ FALSE };
HRESULT hr = ::DwmGetWindowAttribute(hWnd,
DWMWA_NCRENDERING_ENABLED,
&isNCRenderingEnabled,
sizeof(isNCRenderingEnabled));
In dit volgende voorbeeld ziet u hoe u de vlag DWMWA_EXTENDED_FRAME_BOUNDS gebruikt met DwmGetWindowAttribute- om de rechthoek met uitgebreide kadergrenzen van een venster op te halen. In de documentatie voor die vlag wordt aangegeven dat de opgehaalde kenmerkwaarde van het type RECT-is.
RECT extendedFrameBounds{ 0,0,0,0 };
HRESULT hr = ::DwmGetWindowAttribute(hWnd,
DWMWA_EXTENDED_FRAME_BOUNDS,
&extendedFrameBounds,
sizeof(extendedFrameBounds));
Notitie
Volg hetzelfde programmeerpatroon dat hierboven wordt weergegeven wanneer u DwmGetWindowAttribute- aanroept met vlaggen voor verschillende kenmerken. Het DWMWINDOWATTRIBUTE opsommingsonderwerp geeft aan, in de rij voor elke vlag, aan welk type waarde u een aanwijzer moet doorgeven in de parameter pvAttribute voor DwmGetWindowAttribute. De parameter cbAttribute bevat de grootte, in bytes, van dat object.
DwmSetWindowAttribute- kunt uw toepassing het renderingbeleid voor niet-clientgebied instellen. Deze functie bepaalt ook hoe uw toepassing DWM-overgangseffecten moet verwerken.
In dit volgende voorbeeld wordt weergave van niet-clientgebied uitgeschakeld. Hierdoor worden eventuele eerdere aanroepen naar DwmEnableBlurBehindWindow of DwmExtendFrameIntoClientArea uitgeschakeld.
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;
}
Naast het beheren van de rendering van het niet-clientgebied, kan DwmSetWindowAttribute- ook DWM-overgangseffecten beheren. U kunt overgangsgedrag instellen met behulp van DWMWA_TRANSITIONS_FORCEDISABLED als de parameter dwAttribute.
Berichten
De volgende berichten geven een melding van DWM-gebeurtenissen. Deze berichten kunnen worden gebruikt om wijzigingen zoals wijzigingen in de samenstellingsstatus en wijzigingen in het systeemkleurthema te controleren.
- WM_DWMCOLORIZATIONCOLORCHANGED
- WM_DWMCOMPOSITIONCHANGED
- WM_DWMNCRENDERINGCHANGED
- WM_DWMWINDOWMAXIMIZEDCHANGE
DWM-samenstelling uitschakelen (Windows 7 en eerder)
Waarschuwing
De informatie in deze sectie is alleen van toepassing op Windows 7- en eerdere systemen.
Omdat DWM gebruikmaakt van de GPU (Graphics Processing Unit) voor desktopsamenstelling, moet uw toepassing DWM mogelijk uitschakelen voor compatibiliteit. Toepassingen die volledige controle over het bureaublad hebben, zoals games die worden uitgevoerd in de modus Volledig scherm, moeten bepalen of dwM is ingeschakeld en als dit het is, uitschakelen. Hiervoor zijn twee functies nodig.
Een aanroep van DwmEnableComposition- met fEnable ingesteld op DWM_EC_DISABLECOMPOSITION dwm-samenstelling uitschakelt totdat het aanroepende proces is afgesloten of de samenstelling opnieuw is ingeschakeld door DwmEnableComposition- aan te roepen met fEnable ingesteld op DWM_EC_ENABLECOMPOSITION. DWM-samenstelling wordt automatisch opnieuw opgestart zodra alle toepassingen met een uitgeschakelde samenstelling zijn afgesloten of handmatig opnieuw hebben ingeschakeld door DwmEnableComposition-aan te roepen.
Notitie
De DWM schakelt automatisch de samenstelling uit wanneer een toepassing rechtstreeks naar het primaire beeldschermoppervlak probeert te tekenen. De samenstelling wordt uitgeschakeld totdat het primaire apparaatoppervlak door die toepassing wordt vrijgegeven.