共用方式為


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

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 函式,讓視窗使用新的轉譯參數重新繪製。