複数のモニターのサポートを追加する方法
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 関数を使用して、新しいレンダリング パラメーターを使用してウィンドウを再描画します。