Changer couleur texte [Résolu]

cs_kam42 12 Messages postés mercredi 5 décembre 2007Date d'inscription 9 mai 2008 Dernière intervention - 5 déc. 2007 à 16:30 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 9 déc. 2007 à 15:43
salut à tous ;
j'ai un gros probleme; j'ai programmé l'ouverture d'un fichier texte en MFC que j'affiche dans la vue. Mon souci est que je dois changer le fond d'un seul mot dans le texte et je n'y arrive pas. je connais que la fonction setBkColor() , mais cele ci change carrement tout le fond du texte donc ça m'arrange pas .

Exist-il une fonction pour ça ?
es ce que je devrais choisir un autre conteneur pour le texte par exple(CrichEdit, CEdit,....) plu^tôt que la vue ?

voici mon code d'affichage :

void CMotifView::OnDraw(CDC* pDC)
{
 CMotifDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 if (!pDoc)
  return;


 // TODO : ajoutez ici le code de dessin pour les données natives
 // je verifie que le fichier est ouvert
 if(pDoc->m_ouvertdoc==true)
 {
 // conteneur qui contirndra le texte 
 CRect rect ;
 GetClientRect(&rect);
 // ecriture du texte dans la vue active du document
 int n= strlen(pDoc->m_pbuf) ;
 pDC->DrawText((pDoc->m_pbuf),n, &rect,0);
  }
}
merci d'avance
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 8 déc. 2007 à 09:22
3
Merci
Tu as regardé les messages du richdit dans MSDN ? il y a tout ce qu'il faut.

ciao...
BruNews, MVP VC++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de BruNews
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 5 déc. 2007 à 16:40
0
Merci
Prends un richedit.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
cs_kam42 12 Messages postés mercredi 5 décembre 2007Date d'inscription 9 mai 2008 Dernière intervention - 8 déc. 2007 à 00:28
0
Merci
salut à tous ;
j'ai essayé avec un richedit, mais je crois que là n'est pas le probleme. parceque meme avec ça je ne peux modifier la couleur ou le fond que de tout le texte, or moi je veux juste modifier une partie du texte.

j'ai eu une idée pour ça: decomposer mon texte en trois CStrings

le premier CString sera les caracteres avant le  mot ke je veux modifier
le deuxieme CString sera le mot ke je veux modifier
et le troisieme sera les caracteres apres le mot ke je veux modifier

et juste avant d'afficher le deuxieme CString je change la couleur du pen

le probleme est que je sais pas comment afficher trois variables dans la vue , l'une apres l'autre.

t'aurais pas une idée pour ça ? merci d'avance
Commenter la réponse de cs_kam42
cs_kam42 12 Messages postés mercredi 5 décembre 2007Date d'inscription 9 mai 2008 Dernière intervention - 9 déc. 2007 à 14:08
0
Merci
merci BruNews;


j'ai bien cherché, je vois comment ça fontionne mais j'arrive pas à savoir ou placer mon code.


Mon probleme actuellement :
quand j'essaye dans la methode Oninitialupdate(), ça marche niklel au lancement du programme, le code est le suivant:
void CRichView::OnInitialUpdate()
{
 CRichEditView::OnInitialUpdate();
 CRichEditCtrl& theCtrl=GetRichEditCtrl();
 CString str="kamano" ; ;
 theCtrl.SetWindowText(str);
 theCtrl.SetSel(0,4);//select hello as the word to be formatted with different color
 CHARFORMAT cf;
 cf.cbSize = sizeof(CHARFORMAT);
 cf.dwMask = CFM_COLOR ;
 cf.crTextColor = RGB(255,0,0);
 //cf.bCharSet="hmfcjhcccccgh" ;
 cf.dwEffects = 0;//we do not want CFE_AUTOCOLOR , since this will choose GetSysColor value.
 theCtrl.SetWordCharFormat(cf);
 theCtrl.SetSel(0,0);//now, deselect text
 // Définir les marges d'impression (720 twips = 1/2 pouce)
 SetMargins(CRect(720, 720, 720, 720));
}
le probleme avec cette methode est que ça se produit qu'une seule fois, au lancement du programme. alors j'ai essayé de mettre ce code dans le OnPaint() pourque ça s'actualise en fonction du booleen
void Cessai2View::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 // TODO : ajoutez ici le code de votre gestionnaire de messages
 // N'appelez pas CRichEditView::OnPaint() pour la peinture des messages
 Cessai2Doc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 if (!pDoc)
  return;
 
 CString str="jetestemonprogramme ";
 dc.TextOut(0,0,str) ;
 if(pDoc->m_ouvertdoc1==true)
 {
 CRichEditCtrl& theCtrl=GetRichEditCtrl();
 GetWindowText(str) ;
 theCtrl.SetSel(0,4);//select hello as the word to be formatted with different color
 CHARFORMAT cf;
 cf.cbSize = sizeof(CHARFORMAT);
 cf.dwMask = CFM_COLOR ;
 cf.crTextColor = RGB(255,0,0);
 //cf.bCharSet="hmfcjhcccccgh" ;
 cf.dwEffects = 0;//we do not want CFE_AUTOCOLOR , since this will choose GetSysColor value.
 theCtrl.SetWordCharFormat(cf);
 theCtrl.SetSel(0,0);//now, deselect text
 // Définir les marges d'impression (720 twips = 1/2 pouce)
 SetMargins(CRect(720, 720, 720, 720));
 


 }
}
mais ce code ne marche pas !
Alors je serai très joyeux que tu me donnes une piste.
merci d'avance
Commenter la réponse de cs_kam42
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 9 déc. 2007 à 15:43
Commenter la réponse de BruNews

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.