Поделиться через


Добавление поддержки нескольких мониторов

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 , чтобы окно перерисовывалось с новыми параметрами отрисовки.