Udostępnij przez


Jak dodać obsługę wielu monitorów

DirectWrite obejmuje obsługę systemów z wieloma monitorami. Różne monitory mogą mieć inną geometrię pikseli (RGB, BGR lub FLAT) lub inne atrybuty. Aby uzyskać więcej informacji na temat geometrii pikseli, zobacz temat referencyjny DWRITE_PIXEL_GEOMETRY. W tym temacie pokazano, jak dodać obsługę wielu monitorów do aplikacji DirectWrite.

Aby obsługiwać wiele monitorów, należy obsługiwać komunikat okna WM_WINDOWPOSCHANGED. Ten komunikat jest wysyłany po przeniesieniu okna, dlatego należy sprawdzić, czy okno zostało przeniesione do innego monitora, jak pokazano w poniższym kodzie.

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;

Jeśli okno znajduje się na nowym monitorze, należy utworzyć parametry renderowania dla nowego monitora przy użyciu metody IDWriteFactory::CreateMonitorRenderingParams.

Notatka

Nie należy używać metody IDWriteFactory::CreateRenderingParams, aby utworzyć parametry renderowania, ponieważ zawsze tworzy parametry dla monitora podstawowego.

 

Jeśli masz obiekt IDWriteRenderingParams, ustaw parametry renderowania dla obiektu docelowego renderowania przy użyciu metody ID2DRenderTarget::SetTextRenderingParams.

Na koniec użyj funkcji InvalidateRect, aby spowodować ponowne rysowanie okna przy użyciu nowych parametrów renderowania.