Partager via


Ajout de la prise en charge de plusieurs moniteurs

DirectWrite inclut la prise en charge des systèmes avec plusieurs moniteurs. Différents moniteurs peuvent avoir une géométrie de pixels différente (RVB, BGR ou FLAT) ou d’autres attributs. Pour plus d’informations sur la géométrie des pixels, consultez la rubrique de référence DWRITE_PIXEL_GEOMETRY . Cette rubrique vous montre comment ajouter la prise en charge de plusieurs moniteurs à votre application DirectWrite.

Pour prendre en charge plusieurs moniteurs, vous devez gérer le message de fenêtre WM_WINDOWPOSCHANGED . Ce message est envoyé lorsque la fenêtre est déplacée. Vous devez donc case activée si la fenêtre a été déplacée vers un autre moniteur, comme indiqué dans le code suivant.

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 fenêtre se trouve sur un nouveau moniteur, vous devez créer des paramètres de rendu pour le nouveau moniteur à l’aide de la méthode IDWriteFactory::CreateMonitorRenderingParams .

Notes

N’utilisez pas la méthode IDWriteFactory::CreateRenderingParams pour créer les paramètres de rendu, car elle crée toujours des paramètres pour le moniteur principal.

 

Lorsque vous disposez d’un objet IDWriteRenderingParams , définissez les paramètres de rendu de la cible de rendu à l’aide de la méthode ID2DRenderTarget::SetTextRenderingParams .

Enfin, utilisez la fonction InvalidateRect pour faire redessiner la fenêtre avec les nouveaux paramètres de rendu.