Comment implémenter des info-bulles multilignes

Les info-bulles multilignes permettent d’afficher du texte sur plusieurs lignes.

Ils sont pris en charge par les versions 4.70 et ultérieures des contrôles communs. Votre application crée une info-bulle multiligne en envoyant un message TTM_SETMAXTIPWIDTH , en spécifiant la largeur du rectangle d’affichage. Le texte qui dépasse cette largeur est renvoyé à la ligne suivante au lieu d’élargir la zone d’affichage. La hauteur du rectangle est augmentée en fonction des besoins pour prendre en charge les lignes supplémentaires. Le contrôle d’info-bulle encapsule automatiquement les lignes, ou vous pouvez utiliser une combinaison retour chariot/saut de ligne, \r\n, pour forcer les sauts de ligne à des emplacements particuliers.

L’affichage résultant est illustré dans l’illustration suivante.

capture d’écran d’une boîte de dialogue avec une info-bulle qui contient du texte organisé comme un paragraphe multiligne

Notes

La mémoire tampon de texte spécifiée par le membre szText de la structure NMTTDISPINFO ne peut contenir que 80 caractères. Si vous devez utiliser une chaîne plus longue, pointez le membre lpszText de NMTTDISPINFO vers une mémoire tampon contenant le texte souhaité.

 

Bon à savoir

Technologies

Prérequis

  • C/C++
  • Programmation de l’interface utilisateur Windows

Instructions

Implémenter des info-bulles multilignes

Le fragment de code suivant est un exemple de gestionnaire de notification TTN_GETDISPINFO simple. Elle active une info-bulle multiligne en définissant le rectangle d’affichage sur 150 pixels. Un saut de ligne manuel est inséré après le premier mot pour montrer que les sauts de ligne peuvent être durs et mous.

    case WM_NOTIFY:
    {
        switch (((LPNMHDR)lParam)->code)
        {
        case TTN_GETDISPINFO:
            LPNMTTDISPINFO pInfo = (LPNMTTDISPINFO)lParam;
            SendMessage(pInfo->hdr.hwndFrom, TTM_SETMAXTIPWIDTH, 0, 150);
            wcscpy_s(pInfo->szText, ARRAYSIZE(pInfo->szText), 
                L"This\nis a very long text string " \
                L"that must be broken into several lines.");
            break;
        }
        break;
    }

Utilisation des contrôles d’info-bulle