如何在MFC中使用richedit控件_RICHEDIT_VER over 2.1
Posted
技术标签:
【中文标题】如何在MFC中使用richedit控件_RICHEDIT_VER over 2.1【英文标题】:How to use richedit control _RICHEDIT_VER over 2.1 in MFC 【发布时间】:2018-06-28 04:43:09 【问题描述】:我想在 MFC 中使用 Rich 编辑控件的下划线颜色
但是,在 afxwin.h 中,_RICHEDIT_VER 定义了 0x210。 像这样,
#define _RICHEDIT_VER 0x0210
我正在加载“msftedit.dll”(8.1 版本)和 Windows10 SDK (10.0.16299.0) 但是,bUnderlineColor 是在 Richedit.h 中编码的
#if (_RICHEDIT_VER >= 0x0800)
BYTE bUnderlineColor; // Underline color
#endif
如果我不使用包装类(CRichEditCtrl),我可以在 MFC 项目中使用它吗? 以及如何?
【问题讨论】:
这个解决方案适合你吗? codeguru.com/cpp/controls/richedit/editorsandediting/… 【参考方案1】:您可以声明自己的结构并添加bUnderlineColor
。在CRichEdit::SendMessage(EM_SETCHARFORMAT...)
中使用它
虽然这种方法是 hack。也许有更好的方法来说服 MFC 合作。
#ifdef UNICODE
struct MY_CHARFORMAT8 : _charformatw //<--- edited
#else
struct MY_CHARFORMAT8 : _charformat
#endif
WORD wWeight; // Font weight (LOGFONT value)
SHORT sSpacing; // Amount to space between letters
COLORREF crBackColor; // Background color
LCID lcid; // Locale ID
union
DWORD dwReserved; // Name up to 5.0
DWORD dwCookie; // Client cookie opaque to RichEdit
;
SHORT sStyle; // Style handle
WORD wKerning; // Twip size above which to kern char pair
BYTE bUnderlineType; // Underline type
BYTE bAnimation; // Animated text like marching ants
BYTE bRevAuthor; // Revision author index
BYTE bUnderlineColor; // Underline color
;
MY_CHARFORMAT8 format;
memset(&format, sizeof(format), 0);
format.cbSize = sizeof(format);
format.dwMask = CFM_UNDERLINETYPE | CFM_UNDERLINE;
format.dwEffects = CFE_UNDERLINE;
format.crBackColor = RGB(255,0,0);
format.bUnderlineType = CFU_UNDERLINEHAIRLINE;
format.bUnderlineColor = 0x06; //red underline color
m_richedit.SetSel(0, -1);
m_richedit.SendMessage(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&format);
需要初始呼叫AfxInitRichEdit()
必须使用Create
手动创建丰富的编辑控件(不使用SubclassDlgItem
或DDX_Control
),例如:
m_richedit.Create(ES_MULTILINE | WS_VISIBLE | WS_CHILD, rc, this, id);
结果:
【讨论】:
感谢您的回答。 已编辑:UNICODE
需要单独声明
欢迎您@JaeHyeokKim,我必须进行更改,请参阅编辑以上是关于如何在MFC中使用richedit控件_RICHEDIT_VER over 2.1的主要内容,如果未能解决你的问题,请参考以下文章