欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > MFC中添加Richedit2.0控件导致程序无法运行的解决方法mfc richedit2 Detected memory leaks! 及控件使用

MFC中添加Richedit2.0控件导致程序无法运行的解决方法mfc richedit2 Detected memory leaks! 及控件使用

2025/2/24 22:06:42 来源:https://blog.csdn.net/chenhao0568/article/details/145253911  浏览:    关键词:MFC中添加Richedit2.0控件导致程序无法运行的解决方法mfc richedit2 Detected memory leaks! 及控件使用

在这里插入图片描述

错误:拖Richedit2.0控件到界面,编译提示mfc richedit2 Detected memory leaks!

原因:在MFC中添加Richedit2.0控件,可能会导致程序出错或无法运行。这是由于RichEdit没有初始化导致的。

解决:在 继承自CWinApp的类中的InitInstance()函数中加入:

AfxInitRichEdit();

AfxInitRichEdit2();

使用

要编写一个函数,接受颜色和文字作为参数,并将文本以指定的颜色显示在 CRichEditCtrl 控件中,可以像下面这样实现:

函数:SetTextWithColor

这个函数将接受两个参数:一个颜色值和要显示的文本。然后,它将在 CRichEditCtrl 中插入具有指定颜色的文本。

1. 函数原型
void SetTextWithColor(CRichEditCtrl& richEditCtrl, COLORREF color, const CString& text);
2. 实现代码
void SetTextWithColor(CRichEditCtrl& richEditCtrl, COLORREF color, const CString& text)
{// 获取当前文本框中的选择(如果有选中文本)CHARRANGE charRange;richEditCtrl.GetSel(charRange);// 设置新文本的字符格式CHARFORMAT cf;memset(&cf, 0, sizeof(CHARFORMAT));cf.cbSize = sizeof(CHARFORMAT);cf.dwMask = CFM_COLOR;  // 设置颜色的掩码cf.crTextColor = color;  // 设置文本颜色// 设置新的字符格式richEditCtrl.SetSelectionCharFormat(cf);// 插入带有指定颜色的文本richEditCtrl.ReplaceSel(text);
}
3. 如何使用这个函数

假设你有一个 CRichEditCtrl 控件,并且你想要在其中插入一些文字,文字的颜色由用户指定(例如,红色和黑色)。你可以像下面这样调用 SetTextWithColor 函数:

// 插入红色文本
SetTextWithColor(m_richEditCtrl, RGB(255, 0, 0), _T("This is red text. "));// 插入黑色文本
SetTextWithColor(m_richEditCtrl, RGB(0, 0, 0), _T("This is black text."));

4. 解释

  • CHARRANGE:用于获取当前 CRichEditCtrl 控件中选中的文本范围。如果有选中的文本,SetTextWithColor 会覆盖当前选中的文本;如果没有选中文本,它会直接插入新的文本。

  • CHARFORMAT:这是设置文本格式的结构。我们使用 dwMask = CFM_COLOR 来指定只修改文本颜色,crTextColor 设置为函数的 color 参数来改变文本颜色。

  • ReplaceSel:这个方法用于替换当前选择范围的文本。如果没有选中任何文本,它就会直接插入新的文本。

5. 示例调用

假设你有一个按钮,点击按钮后,插入不同颜色的文本,可以通过以下方式实现:

void CMyDialog::OnInsertColoredText()
{// 插入红色文本SetTextWithColor(m_richEditCtrl, RGB(255, 0, 0), _T("This is red text."));// 插入黑色文本SetTextWithColor(m_richEditCtrl, RGB(0, 0, 0), _T(" This is black text."));
}

6. 总结

这个 SetTextWithColor 函数通过参数化颜色和文本,使得你可以轻松地在 CRichEditCtrl 控件中插入不同颜色的文本。通过使用 CHARFORMAT 设置文本格式,可以灵活地调整文字样式。

如果你需要更多功能或有其他问题,随时告诉我!

示例2:比较2个字符串860004050179648和860004050179655 如果不一致把第2个字符串不一致的地方输出为红色

要比较两个字符串 860004050179648860004050179655,并在 CRichEditCtrl 中显示第二个字符串,标记不一致的字符为红色,可以实现以下功能:

实现逻辑

  1. 遍历两个字符串的每个字符,找到不一致的位置。
  2. 对于一致的字符,使用黑色显示。
  3. 对于不一致的字符,使用红色显示。
  4. 最终将处理后的字符串显示到 CRichEditCtrl 中。

以下是完整的代码实现:


函数实现

void CompareAndHighlight(CRichEditCtrl& richEditCtrl, const CString& str1, const CString& str2)
{// 清空 RichEdit 控件的内容richEditCtrl.SetWindowText(_T(""));// 确定较短的字符串长度int len1 = str1.GetLength();int len2 = str2.GetLength();int maxLen = max(len1, len2);for (int i = 0; i < maxLen; ++i){TCHAR ch1 = i < len1 ? str1[i] : _T('\0'); // 字符串 1 当前字符TCHAR ch2 = i < len2 ? str2[i] : _T('\0'); // 字符串 2 当前字符// 判断是否一致if (ch1 == ch2){// 一致部分用黑色显示SetTextWithColor(richEditCtrl, RGB(0, 0, 0), CString(ch2));}else{// 不一致部分用红色显示SetTextWithColor(richEditCtrl, RGB(255, 0, 0), CString(ch2));}}
}

辅助函数:SetTextWithColor

这里的辅助函数 SetTextWithColor 用于在 CRichEditCtrl 中插入指定颜色的文本:

void SetTextWithColor(CRichEditCtrl& richEditCtrl, COLORREF color, const CString& text)
{// 获取当前选择范围CHARRANGE charRange;richEditCtrl.GetSel(charRange);// 设置字符格式CHARFORMAT cf;memset(&cf, 0, sizeof(CHARFORMAT));cf.cbSize = sizeof(CHARFORMAT);cf.dwMask = CFM_COLOR;      // 只修改颜色cf.crTextColor = color;     // 设置颜色// 应用字符格式richEditCtrl.SetSelectionCharFormat(cf);// 插入文本richEditCtrl.ReplaceSel(text);// 重置光标到末尾charRange.cpMin = charRange.cpMax = -1;richEditCtrl.SetSel(charRange);
}

示例调用

在你的对话框代码中,可以调用 CompareAndHighlight 函数来比较两个字符串并显示结果:

void CMyDialog::OnCompareStrings()
{CString str1 = _T("860004050179648");CString str2 = _T("860004050179655");CompareAndHighlight(m_richEditCtrl, str1, str2);
}

显示结果示例

假设 str1 = "860004050179648"str2 = "860004050179655",最终显示在 CRichEditCtrl 中的文本为:

  • 黑色:8600040501796
  • 红色:55

关键点说明

  1. 字符比较

    • 遍历字符串逐个字符比较。
    • 如果长度不一致,将超出短字符串的部分全部视为不一致。
  2. 颜色设置

    • 使用 SetTextWithColor 函数动态插入具有不同颜色的字符。
  3. 灵活性

    • 函数支持任意长度的字符串和不同内容的比较。

如果你有更多的需求或想扩展功能,欢迎继续提问!

同样可以使用通用API

m_richEditCtrl.GetWindowText(imei);
m_richEditCtrl.SetWindowText(imei);

设置背景颜色

// 设置背景颜色(浅灰色,类似 CEdit 控件的只读模式背景)
m_editDisplay.SetBackgroundColor(FALSE, RGB(240, 240, 240));

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词