次の方法で共有


複数のモニターのサポートを追加する方法

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 関数を使用して、新しいレンダリング パラメーターを使用してウィンドウを再描画します。