MFC:如和利用C++使得输出文本颜色、字体多变

    最近在使用MFC开发依款小程序,程序需要【根据一系列的条件来输出具有不同字体格式的文本】,比如:蓝色、红色、楷体等。

    在网上搜索了很多方法,均没法实现。

    经过自己的仔细琢磨,终于找到了解决办法。

【解决问题】:在输出文本的控件上,输出具有不同字体格式的文本。

比如,不同行具有不同颜色、若干位置设置加粗、若干特定字符设置成特定的字体

eg:这句话希望是红色的而这句话希望输出的是蓝色的但这句话希望是黑体,这句话里的“关键词”是加粗的。


要点:

   1、 输出文本的控件,必须是RICHEDIT,不能是EDIT

   2、定义字体的方式:

CHARFORMAT cf,cf_2; //定义若干字体
ZeroMemory(&cf,sizeof(CHARFORMAT)); 
cf.cbSize = sizeof(CHARFORMAT); 
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE|CFM_UNDERLINE; 
cf.dwEffects=0; 
cf.yHeight=15*15; //文字高度
cf.crTextColor=RGB(0,0,0); //文字颜色黑色000,白色全255
strcpy(cf.szFaceName,_T("宋体")); //设置字体

cf_2=cf;// 设置第二种字体
cf_2.dwEffects|=CFE_BOLD;//加粗
cf_2.crTextColor=RGB(255,0,0);

  3、核心一点如何不断使得文本字体变化:

GetDlgItem(IDC_RICHEDIT1)->SetWindowText("");//先清空ID为IDC_RICHEDIT1的控件输出内容,可选。
m_richedit1.SetSel(-1,-1); //追加,这条语句十分重要,其中m_richedit1是IDC_RICHEDIT1的CRichEditCtrl变量(通过类向导设置)
  

     然后就可以按照预定的规则(比如标记位),输出各种颜色、加粗与否、字体等格式不同的文本:

比如:

   if(条件一成立)

{

   m_richedit1.SetSelectionCharFormat(cf);
m_richedit1.ReplaceSel(out2edit); //out2edit是一个char 数组,不支持string

}

else if (条件二成立)

   m_richedit1.SetSelectionCharFormat(cf_2);
m_richedit1.ReplaceSel(out2edit); 

else

    //其他规则输出


3、注意事项(网络上搜索的一些解决办法):

(1)、SetConsoleTextAttribute(GetStdHandle(IDC_RICHEDIT1),FOREGROUND_INTENSITY|FOREGROUND_BLUE);//仅dos窗口编程下能用

(2)、GetDlgItem(IDC_RICHEDIT1)->SetWindowText("某字符串");//这种不是追加方式输出,会覆盖前面的,因此不适于前面提到的场景



关键词:MFC,C++,RICHEDIT,字体,颜色,不同,变化,多变,动态,改变,同一段,不同行,加粗


你可能感兴趣的:(计算机类)