Cómo agregar compatibilidad con varios monitores
DirectWrite incluye compatibilidad con sistemas con varios monitores. Los diferentes monitores pueden tener geometría de píxeles diferentes (RGB, BGR o FLAT) u otros atributos. Para obtener más información sobre la geometría de píxeles, consulte el tema de referencia DWRITE_PIXEL_GEOMETRY . En este tema se muestra cómo agregar compatibilidad con varios monitores a la aplicación de DirectWrite.
Para admitir varios monitores, debe controlar el mensaje de la ventana WM_WINDOWPOSCHANGED . Este mensaje se envía cuando se mueve la ventana, por lo que debe comprobar si la ventana se ha movido a otro monitor, como se muestra en el código siguiente.
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;
Si la ventana se encuentra en un nuevo monitor, debe crear parámetros de representación para el nuevo monitor mediante el método IDWriteFactory::CreateMonitorRenderingParams .
Nota
No use el método IDWriteFactory::CreateRenderingParams para crear los parámetros de representación, ya que siempre crea parámetros para el monitor principal.
Cuando tenga un objeto IDWriteRenderingParams , establezca los parámetros de representación para el destino de representación mediante el método ID2DRenderTarget::SetTextRenderingParams .
Por último, use la función InvalidateRect para que la ventana se vuelva a dibujar con los nuevos parámetros de representación.