cs_kam42
Messages postés12Date d'inscriptionmercredi 5 décembre 2007StatutMembreDernière intervention 9 mai 2008
-
5 déc. 2007 à 16:30
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
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 ?
// 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
cs_kam42
Messages postés12Date d'inscriptionmercredi 5 décembre 2007StatutMembreDernière intervention 9 mai 2008 8 déc. 2007 à 00:28
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.
cs_kam42
Messages postés12Date d'inscriptionmercredi 5 décembre 2007StatutMembreDernière intervention 9 mai 2008 9 déc. 2007 à 14:08
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
Vous n’avez pas trouvé la réponse que vous recherchez ?