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