Freigeben über


Hinzufügen von Unterstützung für mehrere Monitore

DirectWrite umfasst die Unterstützung für Systeme mit mehreren Monitoren. Verschiedene Monitore können unterschiedliche Pixelgeometrie (RGB, BGR oder FLAT) oder andere Attribute aufweisen. Weitere Informationen zur Pixelgeometrie finden Sie im Referenzthema DWRITE_PIXEL_GEOMETRY . In diesem Thema erfahren Sie, wie Sie Ihrer DirectWrite-Anwendung Unterstützung für mehrere Monitore hinzufügen.

Um mehrere Monitore zu unterstützen, müssen Sie die WM_WINDOWPOSCHANGED Fenstermeldung verarbeiten. Diese Nachricht wird gesendet, wenn das Fenster verschoben wird. Daher müssen Sie überprüfen, ob das Fenster auf einen anderen Monitor verschoben wurde, wie im folgenden Code gezeigt.

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;

Wenn sich das Fenster auf einem neuen Monitor befindet, müssen Sie Mithilfe der IDWriteFactory::CreateMonitorRenderingParams-Methode Renderingparameter für den neuen Monitor erstellen.

Hinweis

Verwenden Sie nicht die IDWriteFactory::CreateRenderingParams-Methode , um die Renderingparameter zu erstellen, da sie immer Parameter für den primären Monitor erstellt.

 

Wenn Sie über ein IDWriteRenderingParams-Objekt verfügen, legen Sie die Renderingparameter für das Renderziel mithilfe der ID2DRenderTarget::SetTextRenderingParams-Methode fest.

Verwenden Sie schließlich die InvalidateRect-Funktion , um das Fenster mit den neuen Renderingparametern neu zu zeichnen.