2010-10-11 6 views
0

J'utilise CMFCLinkCtrl dans ma boîte de dialogue personnalisée qui hérite de CDialog. Le CMFCLinkCtrl est défini dynamiquement en utilisant des données qui sont définies par l'utilisateur dans une autre partie de l'application, donc je dois gérer de longues URL.Problèmes d'encapsulation du contrôle de liaison MFC

Existe-t-il un moyen pour que le contrôle de lien tronque ce qui est affiché dans la boîte de dialogue et ajoute une ellipse à la fin? Actuellement, le contrôle passe à la ligne suivante quand il est trop long pour entrer dans le dialogue ou voit le "//" dans le http: //.

Répondre

1

Les contrôles statiques ont un style SS_ENDELLIPSIS qui fait exactement ce que vous voulez, mais malheureusement cela ne fonctionnera pas avec CMFCLinkCtrl qui est dérivé de CButton. Donc, vous avez deux choix:

  1. Utilisez un contrôle statique avec le style SS_ENDELLIPSIS, mais vous devrez définir la couleur du texte et vous-même la police, et gérer les événements et cliquez sur ouvrir l'URL manuellement.

  2. Sous-classe CMFCLinkCtrl et d'ajouter un code de dessin personnalisé pour ajouter l'ellipse.

+0

Je finirai probablement par sous-classer CMFCLinkCtrl. Cependant, existe-t-il un moyen d'empêcher le "//" d'insérer une nouvelle ligne? – csnullptr

+0

Je suppose que le contrôle consiste simplement à casser le texte en mots et considère '/' comme une ponctuation. Si vous sous-classez le contrôle, vous aurez un contrôle total sur le dessin, vous ne devriez donc pas avoir ce problème. – casablanca

0

Je pense que vous n'avez pas de chance. Vous devrez faire ce que Casablanca dit ou sans sous-classe tronquer le texte vous-même (calculer la taille de la police et la taille du contrôle de lien) et le définir en utilisant SetWindowText.

Vous pouvez facilement redimensionner le contrôle pour contenir le texte entier en utilisant SizeToContent, mais je ne pense pas que cela fonctionne pour vous.

Questions connexes