Comment ajouter la prise en charge de plusieurs moniteurs
DirectWrite prend en charge les systèmes avec plusieurs moniteurs. Différentes analyses peuvent avoir une géométrie de pixels différente (RVB, BGR ou plat) ou d’autres attributs. Pour plus d’informations sur la géométrie des pixels, consultez la rubrique de référence sur la _ _ géométrie des pixels DWRITE . cette rubrique vous montre comment ajouter la prise en charge de plusieurs moniteurs à votre application DirectWrite.
Pour prendre en charge plusieurs analyses, 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 vérifier si la fenêtre a été déplacée vers un autre moniteur, comme illustré 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 une nouvelle analyse, vous devez créer des paramètres de rendu pour le nouvel analyseur à 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 l’analyse principale.
Quand vous avez un objet IDWriteRenderingParams , définissez les paramètres de rendu pour la cible de rendu à l’aide de la méthode ID2DRenderTarget :: SetTextRenderingParams .
Enfin, utilisez la fonction InvalidateRect pour faire en sorte que la fenêtre redessine avec les nouveaux paramètres de rendu.