如何在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);
您可以使用帮助程序功能使此操作更容易。例如看这篇文章
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] 删除。
我来说两句