Partager via


Mise en forme et disposition du texte

DirectWrite fournit deux interfaces pour la mise en forme du texte : IDWriteTextFormat et IDWriteTextLayout. IDWriteTextFormat décrit uniquement le format du texte et est utilisé dans les cas où une chaîne entière doit avoir la même taille de police, le même style, le même poids, etc. D’autre part, IDWriteTextLayout encapsule à la fois une chaîne de texte et la mise en forme pour les plages spécifiées de la chaîne. Ce document décrit chaque interface et leurs utilisations. Pour plus d’informations sur la création et les méthodes de ces interfaces, consultez les pages de référence IDWriteTextFormat et IDWriteTextLayout .

Ce document contient les parties suivantes :

IDWriteTextFormat

Un objet IDWriteTextFormat est utilisé pour :

  • Décrire le format d’une chaîne entière lors du rendu. Pour afficher une chaîne avec plusieurs formats, utilisez un objet IDWriteTextLayout .
  • Spécifiez le format de texte par défaut lors de la création d’un objet IDWriteTextLayout .

Pour créer un objet IDWriteTextFormat , vous utilisez la méthode IDWriteFactory::CreateTextFormat et spécifiez la famille de polices, la collection de polices, la pondération de la police, la taille de la police (en DIPs) et le nom des paramètres régionaux.

Modification d’un IDWriteTextFormat

Une fois qu’une interface IDWriteTextFormat est créée, certaines valeurs ne peuvent pas être modifiées : la famille de polices, la collection, le poids et la taille, ainsi que le nom des paramètres régionaux. Pour modifier ces valeurs, un nouvel objet IDWriteTextFormat doit être créé.

IDWriteTextLayout vous permet de modifier les propriétés ci-dessus sans recréer quoi que ce soit. IDWriteTextFormat vous permet d’apporter des modifications de format qui s’appliquent à l’ensemble du texte, comme l’alignement du texte. Si vous souhaitez appliquer la mise en forme à des plages de caractères spécifiques, vous devez le faire à l’aide d’un IDWriteTextLayout.

IDWriteTextFormat fournit des méthodes pour définir l’alignement du texte, le sens du flux, le taquet de tabulation incrémentiel, l’espacement des lignes, l’alignement des paragraphes, le découpage et l’habillage de mots. Ces propriétés peuvent être modifiées à tout moment après la création de l’objet IDWriteTextFormat .

IDWriteTextLayout

L’interface IDWriteTextLayout, contrairement à IDWriteTextFormat, représente à la fois un bloc de texte et la mise en forme associée. IDWriteTextFormat représente les informations de mise en forme initiale. L’exemple suivant montre comment créer un objet IDWriteTextLayout à l’aide de IDWriteFactory::CreateTextLayout.

// Create a text layout using the text format.
if (SUCCEEDED(hr))
{
    RECT rect;
    GetClientRect(hwnd_, &rect); 
    float width  = rect.right  / dpiScaleX_;
    float height = rect.bottom / dpiScaleY_;

    hr = pDWriteFactory_->CreateTextLayout(
        wszText_,      // The string to be laid out and formatted.
        cTextLength_,  // The length of the string.
        pTextFormat_,  // The text format to apply to the string (contains font information, etc).
        width,         // The width of the layout box.
        height,        // The height of the layout box.
        &pTextLayout_  // The IDWriteTextLayout interface pointer.
        );
}

Le texte d’un objet IDWriteTextLayout ne peut pas être modifié une fois l’objet créé. Pour modifier le texte, vous devez supprimer l’objet existant et créer un objet IDWriteTextLayout .

Vous pouvez utiliser un IDWriteTextLayout pour mettre en forme des plages de texte spécifiées. IDWriteTextLayout fournit également des méthodes permettant de modifier le style et le poids de police, d’ajouter des fonctionnalités de police OpenType et de tester les accès. Pour plus d’informations et une liste complète des méthodes, consultez la page de référence IDWriteTextLayout .

Mise en forme d’une plage de texte

IDWriteTextLayout fournit plusieurs méthodes pour mettre en forme des plages de texte. Chacune de ces méthodes prend une structure DWRITE_TEXT_RANGE en tant que paramètre pour spécifier la position du texte de départ dans la chaîne et la longueur de la plage à mettre en forme. L’exemple suivant montre comment définir la pondération de police d’une plage de texte en gras.

// Set the font weight to bold for the first 5 letters.
DWRITE_TEXT_RANGE textRange = {0, 5};

if (SUCCEEDED(hr))
{
    hr = pTextLayout_->SetFontWeight(DWRITE_FONT_WEIGHT_BOLD, textRange);
}

Options de rendu

Le texte avec une mise en forme décrite par un objet IDWriteTextFormat seul peut être rendu avec Direct2D. Toutefois, il existe quelques options supplémentaires pour le rendu d’un objet IDWriteTextLayout .

La chaîne décrite par un objet IDWriteTextLayout peut être rendue à l’aide des méthodes ci-dessous.

  1. Rendu à l’aide de Direct2D.
  2. Effectuez un rendu à l’aide d’un convertisseur de texte personnalisé.
  3. Rendu sur une surface GDI.