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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/956939.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每打开一个chrome页面都会【自动打开F12开发者模式】,原因是 使用HBuilderX会影响谷歌浏览器的浏览模式

打开 HBuilderX&#xff0c;点击 运行 -> 运行到浏览器 -> 设置web服务器 -> 添加chrome浏览器安装路径 chrome谷歌浏览器插件 B站视频下载助手插件&#xff1a; 参考地址&#xff1a;Chrome插件 - B站下载助手&#xff08;轻松下载bilibili哔哩哔哩视频&#xff09…

【电视盒子】HI3798MV300刷机教程笔记/备份遥控码修复遥控器/ADB/线刷卡刷/电视盒子安装第三方应用软件

心血来潮&#xff0c;看到电视机顶盒满天飞的广告&#xff0c;想改造一下家里的电视盒子&#xff0c;学一下网上的人刷机&#xff0c;但是一切都不知道怎么开始&#xff0c;虽然折腾了一天&#xff0c;以失败告终&#xff0c;还是做点刷机笔记。 0.我的机器 年少不会甄别&…

USART_串口通讯轮询案例(HAL库实现)

引言 前面讲述的串口通讯案例是使用寄存器方式实现的&#xff0c;有利于深入理解串口通讯底层原理&#xff0c;但其开发效率较低&#xff1b;对此&#xff0c;我们这里再讲基于HAL库实现的串口通讯轮询案例&#xff0c;实现高效开发。当然&#xff0c;本次案例需求仍然和前面寄…

AI绘画入门:探索数字艺术新世界(1/10)

引言&#xff1a;AI 绘画的兴起与现状 在科技飞速发展的当下&#xff0c;AI 绘画如同一场艺术领域的风暴&#xff0c;正以惊人的速度席卷而来&#xff0c;彻底改变着我们对艺术创作的认知。近年来&#xff0c;AI 绘画相关的话题屡屡登上热搜&#xff0c;从社交媒体上各种 AI 生…

多线程杂谈:惊群现象、CAS、安全的单例

引言 本文是一篇杂谈&#xff0c;帮助大家了解多线程可能会出现的面试题。 目录 引言 惊群现象 结合条件变量 CAS原子操作&#xff08;cmp & swap&#xff09; 线程控制&#xff1a;两个线程交替打印奇偶数 智能指针线程安全 单例模式线程安全 最简单的单例&…

Ubuntu -- 几行命令使用Ollama部署本地AI大模型, 仅调用api, 快速测试api效果

需求 需要在本地快速部署一个大模型, 然后使用 局域网 的其他电脑进行 api调用为了快速测试, 大模型选择了 qwen2:0.5B 进行快速测试 开始 下载安装 ollama curl -fsSL https://ollama.com/install.sh | sh验证安装 ollama --version下载安装模型并运行 ollama run qwen2:…

无降智o1 pro——一次特别的ChatGPT专业模式探索

这段时间和朋友们交流 ChatGPT 的使用心得&#xff0c;大家都提到一个很“神秘”的服务&#xff1a;它基于 O1 Pro 模型&#xff0c;能够在对话里一直保持相对高水平的理解和回复&#xff0c;不会突然变得“降智”。同时&#xff0c;整体使用还做了免折腾的网络设置——简单一点…

1. 基于图像的三维重建

1. 基于图像的三维重建 核心概念三维重建中深度图、点云的区别&#xff1f;深度图点云总结 深度图到点云还需要什么步骤&#xff1f;1. **获取相机内参**2. **生成相应的像素坐标**3. **计算三维坐标**4. **构建点云**5. **处理颜色信息&#xff08;可选&#xff09;**6. **去除…

国内有哪些著名的CRM系统提供商?

嘿&#xff0c;你有没有想过&#xff0c;在这个信息爆炸的时代里&#xff0c;企业怎么才能更好地管理客户关系呢&#xff1f;答案就是使用高效的CRM系统。今天我就来给大家聊聊那些在国际上非常有名的CRM系统提供商吧。 悟空CRM 首先不得不提的就是悟空CRM了&#xff01;这可…

QTableWidget的简单使用

1.最简单的表格示例&#xff1a; ui->tableWidget->setRowCount(2);// 设置行数ui->tableWidget->setColumnCount(3);// 设置列数&#xff0c;一定要放在设置行表头之前QStringList rowHeaderList;// 行表头rowHeaderList << QStringLiteral("姓名"…

Jenkins-Pipeline简述

一. 什么是Jenkins pipeline&#xff1a; pipeline在jenkins中是一套插件&#xff0c;主要功能在于&#xff0c;将原本独立运行于单个或者多个节点的任务连接起来&#xff0c;实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL&#xff0c;任何发布流程…

Hadoop美食推荐系统 爬虫1.8w+数据 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离

Hadoop美食推荐系统 爬虫1.8w数据 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离 【Hadoop项目】 1. data.csv上传到hadoop集群环境 2. data.csv数据清洗 3.MapReducer数据汇总处理, 将Reducer的结果数据保存到本地Mysql数据库中 4. SpringbootEchartsMySQL 显…

两份PDF文档,如何比对差异,快速定位不同之处?

PDF文档比对是通过专门的工具或软件&#xff0c;自动检测两个PDF文件之间的差异&#xff0c;并以可视化的方式展示出来。这些差异可能包括文本内容的修改、图像的变化、表格数据的调整、格式的改变等。比对工具通常会标记出新增、删除或修改的部分&#xff0c;帮助用户快速定位…

苍穹外卖项目总结(二)

本篇对苍穹外卖后半部分进行介绍&#xff0c;重点是redis缓存的使用以及微信小程序客户端开发。 目录 一、菜品管理 1.1新增菜品 1.2菜品的分页查询 1.3删除菜品 1.4修改菜品 1.5设置营业状态 二、微信小程序客户端的开发 三、Redis的基本使用 常用命令&#xff1a; 缓…

MyBatisPlus简介及入门案例

一、简介 官网&#xff1a;https://baomidou.com/introduce/ 1.简介 MyBatisPlus只做增强&#xff0c;不做改变&#xff0c;为简化开发、提高效率而生 2.特性 (1)无侵入 只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xff0c;如丝般顺滑 (2)损耗小 启动…

欧拉(Euler 22.03)安装ProxySQL

下载离线安装包 proxysql-2.0.8-1-centos7.x86_64.rpm 链接: https://pan.baidu.com/s/1R-SJiVUEu24oNnPFlm9wRw 提取码: sa2w离线安装proxysql yum localinstall -y proxysql-2.0.8-1-centos7.x86_64.rpm 启动proxysql并检查状态 systemctl start proxysql 启动proxysql syste…

电子应用设计方案96:智能AI充电器系统设计

智能 AI 充电器系统设计 一、引言 智能 AI 充电器系统旨在为各种电子设备提供高效、安全、智能的充电解决方案&#xff0c;通过融合人工智能技术&#xff0c;实现自适应充电、优化充电效率和保护电池寿命。 二、系统概述 1. 系统目标 - 自适应识别不同设备的充电需求&#xf…

TongESB7.1.0.0如何使用dockercompose运行镜像(by lqw)

文章目录 安装准备安装 安装准备 1.安装好docker和dockercompose&#xff1a; docker、docker-compose安装教程&#xff0c;很详细 2.上传好安装相关文件 安装 使用以下命令导入管理端镜像和运行时镜像 docker load -i tongesb_manage_7100.tar docker load -i tongesb_se…

Python 模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

微软Win10 RP 19045.5435(KB5050081)预览版发布!

系统之家1月20日最新报道&#xff0c;微软面向Release Preview频道的Windows Insider项目成员&#xff0c;发布了适用于Windows10 22H2版本的KB5050081更新&#xff0c;更新后系统版本号将升至19045.5435。本次更新增加了对GB18030-2022标准的支持&#xff0c;同时新版日历将为…