Compartilhar via


Como adicionar suporte para vários monitores

DirectWrite inclui suporte para sistemas com vários monitores. Monitores diferentes podem ter geometria de pixel diferente (RGB, BGR ou FLAT) ou outros atributos. Para obter mais informações sobre geometria de pixel, consulte o tópico de referência DWRITE_PIXEL_GEOMETRY . Este tópico mostrará como adicionar suporte a vários monitores ao aplicativo DirectWrite.

Para dar suporte a vários monitores, você deve lidar com a mensagem de janela WM_WINDOWPOSCHANGED . Essa mensagem é enviada quando a janela é movida, portanto, você deve marcar se a janela foi movida para um monitor diferente, conforme mostrado no código a seguir.

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;

Se a janela estiver localizada em um novo monitor, você deverá criar parâmetros de renderização para o novo monitor usando o método IDWriteFactory::CreateMonitorRenderingParams .

Observação

Não use o método IDWriteFactory::CreateRenderingParams para criar os parâmetros de renderização, pois ele sempre cria parâmetros para o monitor primário.

 

Quando você tiver um objeto IDWriteRenderingParams , defina os parâmetros de renderização para o destino de renderização usando o método ID2DRenderTarget::SetTextRenderingParams .

Por fim, use a função InvalidateRect para fazer com que a janela seja redesenhada com os novos parâmetros de renderização.