Как использовать richedit control _RICHEDIT_VER более 2.1 в MFC

Я хотел бы использовать цвет подчеркивания элемента управления Rich edit в MFC

но в 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.
и как?

3

Решение

Вы можете объявить свою собственную структуру и добавить bUnderlineColor, Используйте это в CRichEdit::SendMessage(EM_SETCHARFORMAT...)

Этот метод взломать хотя. Возможно, есть лучший способ убедить МФЦ сотрудничать.

#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);

Результат:
введите описание изображения здесь

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]