2010-04-13 4 views
6

S'il vous plaît ne pas marquer comme dupe de cette question pour l'instant:Comment créer une étiquette en gras et italique dans MFC?

Bold labels in MFC

Cette question ne me aide pas; pour une raison quelconque, je ne vois pas le contrôle d'édition riche. Au lieu de cela, je crois que je dois le faire en code. voici un exemple que j'ai trouvé:

http://www.tech-archive.net/Archive/VC/microsoft.public.vc.mfc/2006-10/msg00245.html

Mon problème est que je préfère ne pas réinventer la roue et un test pour moi-même des erreurs ou par AQ.

Quelqu'un doit avoir implémenté cela auparavant. S'il vous plaît partagez votre code.

Ce que je voudrais faire est la suivante:

  • garder la même taille de la police, la famille, etc. comme dans l'étiquette déjà créée, mais en font gras et en italique ainsi. Conservez une empreinte mémoire relativement faible (ne créez aucun objet inutile), mais ne mettez pas l'application dans un état incohérent non plus.

J'apprécie votre aide.

+1

Si vous n'utilisez pas un contrôle éditeur de texte, quel type de contrôle que vous utilisez? Texte statique? –

+1

Oui, une étiquette, alias texte statique. Merci pour la question. –

+1

En outre, je trouve votre attitude «Je ne veux pas travailler, donnez-moi le code» pour être très impoli. –

Répondre

7

Vous devez effectuer les opérations suivantes avant que le contrôle de texte statique ne s'affiche sur la fenêtre parente.

  1. Obtenez une poignée à la fenêtre: CWnd * pwnd = GetDlgItem(IDC_LABEL);
  2. Récupère la police en cours pour le texte statique: CFont * pfont = pwnd->GetFont();
  3. Obtenez les caractéristiques de la police: LOGFONT lf; pfont->GetLogFont(&lf);
  4. Modifiez les champs lfWeight et lfItalic dans lf.
  5. Placez un objet CFont dans votre fenêtre parent, de sorte qu'il existera pendant toute la durée de vie de la fenêtre enfant.
  6. Initialisez le CFont: m_font.CreateFontIndirect(&lf);
  7. Définir la police dans la fenêtre de texte statique: pwnd->SetFont(&m_font);
+0

Il s'avère que j'ai également besoin d'appeler DeleteObject() sur la police. http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/69089425-f186-47fe-9c32-baa29ac2a50c –

+0

Non, c'était aussi une mauvaise idée. –

+0

MFC appelle automatiquement DeleteObject lorsque l'objet CFont est détruit. –

Questions connexes