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

    xiaoxiao2021-03-25  47

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

     

    转载请注明原文地址: https://ju.6miu.com/read-37008.html

    最新回复(0)