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,字体,颜色,不同,变化,多变,动态,改变,同一段,不同行,加粗

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值