Ondersteuning voor meerdere monitors toevoegen

DirectWrite bevat ondersteuning voor systemen met meerdere monitors. Verschillende beeldschermen kunnen verschillende pixelgeometrie (RGB, BGR of FLAT) of andere kenmerken hebben. Zie het naslagonderwerp DWRITE_PIXEL_GEOMETRY voor meer informatie over pixelgeometrie. In dit onderwerp wordt uitgelegd hoe u ondersteuning voor meerdere monitors toevoegt aan uw DirectWrite-toepassing.

Als u meerdere monitors wilt ondersteunen, moet u het WM_WINDOWPOSCHANGED-vensterbericht afhandelen. Dit bericht wordt verzonden wanneer het venster wordt verplaatst, dus u moet controleren of het venster is verplaatst naar een andere monitor, zoals wordt weergegeven in de volgende code.

case WM_WINDOWPOSCHANGED:
    {
        HMONITOR monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONULL);
        if (monitor != g_monitor)
        {
            g_monitor = monitor;
            if (g_spRenderTarget != NULL)
            {
                IDWriteRenderingParams* pRenderingParams = NULL;
                g_spDWriteFactory->CreateMonitorRenderingParams(monitor, &pRenderingParams);

                g_spRenderTarget->SetTextRenderingParams(pRenderingParams);

                SafeRelease(&pRenderingParams);
            }

            InvalidateRect(hwnd, NULL, TRUE);
        }
    }
    break;

Als het venster zich op een nieuwe monitor bevindt, moet u renderingparameters voor de nieuwe monitor maken met behulp van de methode IDWriteFactory::CreateMonitorRenderingParams methode.

Notitie

Gebruik niet de methode IDWriteFactory::CreateRenderingParams om de renderingparameters te maken, omdat er altijd parameters worden gemaakt voor de primaire monitor.

 

Wanneer u een IDWriteRenderingParams object hebt, stelt u de renderingparameters voor het renderdoel in met behulp van de methode ID2DRenderTarget::SetTextRenderingParams.

Gebruik ten slotte de functie InvalidateRect om ervoor te zorgen dat het venster opnieuw wordt getekend met de nieuwe renderingparameters.