如何添加对多个监视器的支持

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 函数使窗口使用新的呈现参数重绘。