共用方式為


如何新增多個監視器的支援

DirectWrite包括支援具有多個監視器的系統。 不同的監視器可能會有不同的圖元幾何 (RGB、BGR 或 FLAT) 或其他屬性。 如需圖元幾何的詳細資訊,請參閱 DWRITE_PIXEL_GEOMETRY 參考主題。 本主題將示範如何將多個監視器的支援新增至DirectWrite應用程式。

若要支援多個監視器,您必須處理 WM_WINDOWPOSCHANGED 視窗訊息。 此訊息會在移動視窗時傳送,因此您必須檢查視窗是否已移至不同的監視器,如下列程式碼所示。

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;

如果視窗位於新的監視器上,則必須使用 IDWriteFactory::CreateMonitorRenderingParams 方法來建立新監視器的轉譯參數。

注意

請勿使用 IDWriteFactory::CreateRenderingParams 方法來建立轉譯參數,因為它一律會建立主要監視器的參數。

 

當您有 IDWriteRenderingParams 物件時,請使用 ID2DRenderTarget::SetTextRenderingParams 方法設定轉譯目標的轉譯參數。

最後,使用 InvalidateRect 函式,讓視窗以新的轉譯參數重新繪製。