如何新增多個監視器的支援
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 函式,讓視窗以新的轉譯參數重新繪製。