MFC SDI丰富编辑2.0控件粗体字

史蒂文五世

如何在Rich Edit 2.0控件中设置文本格式?到目前为止,我只有一个简单的小MFC程序,具有单个视图和一个丰富的edit 2.0控件。它目前是空的,但我想在其中插入一些文字。

控件本身被标记为StringToChange2,而我的类中的成员是m_StringToChange2。

    TCHAR INIValue2[256] = _T("Here is some random text!");
    SetDlgItemText(StringToChange2, INIValue2);

这样看来,当我运行程序时,它将文本插入到控件中。我如何才能使整个字符串中的单词变为粗体?

例如,我只想说:“这是一些随机文本!” 就目前情况而言,我可以使整个控件变为粗体,但我不希望整个控件都变为粗体,仅是一个字。

该链接与我要问的问题非常相似,但是有两点错误。首先,几乎所有评论都告诉他使用HTML控件,而我现在还不想谈谈。其次,一个确实回答过他的人有这么长的代码片段,我不知道发生了什么。最后一个答案建议他使用写字板,因为它使用RTF?

我试图将RTF代码插入INIValue2,但不会接受。除非我使用错了,否则情况很可能如此。

我一直在跟踪MSDN并阅读这些功能,但是我在MFC和Richedit控件方面的专业水平非常有限。如果有人可以举一个小例子,它甚至不必与我的问题有关,但我可以以此为基础。

Edit1:不是我的INIValue2不接受它,而是当它出现在我的单个视图上时-它显示了所有内容-包括所有RTF代码和标头。

巴马克·谢米拉尼

您必须使用EM_SETCHARFORMAT消息格式化文本在MFC中,您可以使用CRichEditCtrl::SetSelectionCharFormat

首先,CRichEditCtrl在对话框或窗口类中声明成员数据

CRichEditCtrl m_richedit;

OnInitDialog

m_richedit.SubclassDlgItem(IDC_RICHEDIT21, this);

应用CHARFORMAT如下:

CHARFORMAT cf = { sizeof(cf) };
cf.dwEffects = CFM_BOLD;
cf.dwMask = CFM_BOLD;
m_richedit.SetSel(0,2);
m_richedit.SetSelectionCharFormat(cf);

您可以使用帮助程序功能使此操作更容易。例如看这篇文章


要直接分配RTF文本,必须使用 EM_STREAMIN 由于某些原因,MFC对此没有功能,因此您必须编写自己的函数

DWORD __stdcall callback_rtf_settext(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
    CString *psBuffer = (CString*)dwCookie;
    if (cb > psBuffer->GetLength()) 
        cb = psBuffer->GetLength();
    for (int i = 0; i < cb; i++) 
        *(pbBuff + i) = (BYTE)psBuffer->GetAt(i);
    *pcb = cb;
    *psBuffer = psBuffer->Mid(cb);
    return 0;
}

bool setrtf(CRichEditCtrl &edit, const CString &s)
{
    EDITSTREAM es;
    edit.SetSel(0, -1);
    edit.Clear();
    memset(&es, 0, sizeof(es));
    es.dwCookie = (DWORD_PTR)&s;
    es.pfnCallback = callback_rtf_settext;
    edit.StreamIn(SF_RTF, es);
    return es.dwError == 0;
}

用法:

setrf(m_richedit, L"\\rtf data...");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从MFC中的编辑控件写入文本

来自分类Dev

MFC 编辑控件 EN_KILLFOCUS 问题

来自分类Dev

在用户键入MFC时验证编辑控件的文本

来自分类Dev

使用MFC中的“编辑框”处理滑块控件

来自分类Dev

使单个项目在列表控件(C ++,MFC)中可编辑

来自分类Dev

MFC控件的消息流?

来自分类Dev

MFC控件的消息流?

来自分类Dev

如何在MFC SDI主窗口中添加编辑框和按钮?

来自分类Dev

C ++ MFC SDI创建子窗口

来自分类Dev

pywinAuto - 使用 Windows MFC 控件

来自分类Dev

MFC:获取编辑控件文本并将其拆分为二维数组?

来自分类Dev

如何在MFC应用程序中获取列表控件的已编辑子项索引

来自分类Dev

在MFC SDI上使用OpenGL4.x

来自分类Dev

如何处理sdi MFC中的Ctrl + Ctrl + A

来自分类Dev

MFC:如何清除SDI应用程序的最近文件列表?

来自分类Dev

自动重新排列MFC控件ID

来自分类Dev

MFC-无法直接创建控件

来自分类Dev

更改MFC列表控件标题颜色

来自分类Dev

MFC控件“ CVSListBox”-如何使用接口“ AddButton”?

来自分类Dev

使用OpenGL在MFC控件中平移

来自分类Dev

MFC:TAB以编程方式对控件进行排序

来自分类Dev

MFC-编辑文件打开动作

来自分类Dev

VC ++ MFC中的简单UDP套接字

来自分类Dev

如何在添加到MFC Doc / Frame项目的对话框中为“编辑控件框”设置默认值

来自分类Dev

MFC WebBrowser控件:模拟Ctrl + N需要几行(正常)代码?

来自分类Dev

在MFC应用程序中动态创建控件

来自分类Dev

MFC自定义控件背景/文本颜色

来自分类Dev

C ++ MFC:将通用控件分为一组

来自分类Dev

如何在MFC图片控件中的设计时显示图片?