Compartir a través de


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.