簡體   English   中英

MFC SDI豐富的編輯2.0控制粗體字

[英]MFC SDI rich edit 2.0 control bolding words

我如何在富編輯2.0控件中格式化文本? 截至目前,我只有一個簡單的小MFC程序,只有一個視圖,只有一個豐富的編輯2.0控件。 它目前是空的,但我想在其中插入一些文字。

控件本身標記為StringToChange2,我的類中的成員是m_StringToChange2。

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

現在,當我運行我的程序時,它會將文本插入到我的控件中。 如何從整個字符串中加粗?

例如,我只想說:“這是一些隨機文本!” 就目前而言,我可以使整個控制變得大膽,但我不希望整個事情變得大膽,只是一個字。

這個鏈接與我提出的問題非常相似,但有兩個問題。 首先,幾乎所有的評論都告訴他使用我不想轉向的HTML控件。 其次,對他做出回應的那個人有如此長的代碼片段,我不明白發生了什么。 最后一個答案建議他使用字墊,因為它使用RTF?

我試圖將RTF代碼插入我的INIValue2但它不會接受它。 除非我使用它錯了,否則情況可能就是這樣。

我一直在跟蹤MSDN並閱讀這些功能,但我對MFC和richedit控制的專業水平非常有限。 如果有人可以發布一個小例子,它甚至不必涉及我的問題,但我可以用作基礎。

編輯1:這不是我的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..."); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM