次の方法で共有


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

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