CRichEditCtrlEx支持静态表情聊天类的使用

article/2025/10/19 3:52:16

本文作者:无幻
博客地址:http://blog.csdn.net/akof1314

 

平时我们在做IM聊天之类的软件的时候,一般都会使用Rich Edit控件来作为聊天编辑框和聊天记录框的控件,在之前的VC知识库看过《类似 MSN 信息发送框的制作(上)》、《类似 MSN 带转义字符的信息发送框的制作(下)》、《一个在RichEdit中添加表情图象的类》学到不少东西,在Visual Studio 2008 SP1下扩展了些功能,比如解码转义字符、编码转义字符、自动检测超链接、聊天记录框的用户内容和信息内容颜色和缩进分开显示等等,加上原来的插入位图表情、右键菜单、表情拾取器、RTF输入输出等等,可以符合基本的聊天控件要求了。见下图效果所示:

这是Unicode版本,如有需要的请自行修改其他版本。下面以Visual Studio 2008 SP1环境介绍使用方法:
1.新建一个基于对话框工程,名称为TestCoolChat,为Unicode字符集;
2.将素材img文件夹放在工程下面,导入InnerButton.h、InnerButton.cpp、BmpPicker.h、BmpPicker.cpp、BmpContainer.h、BmpContainer.cpp、RichEditCtrlEx.h、RichEditCtrlEx.cpp、oleimpl2.h到工程方案;
3.在窗体上放一个“表情选择”按钮、“发送”按钮和两个RichEidt控件,分别作为聊天编辑框和聊天记录框,设置它们的属性其MultilineTruewant returnTrueVertical ScrollTrue,把聊天编辑框做为聊天记录框的下一个TAB键顺序控件,在应用程序实现文件里面添加AfxInitRichEdit2(),分别为两个RichEdit控件添加变量:

CRichEditCtrlEx m_RichEdit; 
CRichEditCtrlEx m_RichLog; 

为“选择表情”按钮添加变量:

CBmpPicker m_BmpPicker; 

在对话框初始化函数OnInitDialog()里面添加如下代码:

CString strFileName;  
for(int i=1;i<21;i++)    //加载表情图片  
{  
    strFileName.Format(_T("img//%d.bmp"),i);  
    m_BmpPicker.AddBitmap(strFileName);          
}  
m_RichLog.SetType(CHATLOG);//设置聊天记录框类型  

4.添加“选择表情”按钮单击事件:

void CTestCoolChatDlg::OnBnClickedButton1()  
{      
    int index=m_BmpPicker.GetCurrentBitmapIndex();  
    m_RichEdit.InsertBitmap(HBITMAP(*m_BmpPicker.GetBitmapAt(index)),index);      
}  

5.添加“发送”按钮单击事件:

void CTestCoolChatDlg::OnBnClickedButton5() 

    CHARFORMAT cf; 
    m_RichLog.AddMessageUser(_T("天使之泪"),RGB(0,128,64)); 
    m_RichEdit.GetDefaultCharFormat(cf); 
    m_RichLog.AddMessgaeText(m_RichEdit.EncodeRichMessage(),cf.szFaceName,cf.yHeight/20,(cf.dwEffects & CFE_BOLD),(cf.dwEffects & CFE_ITALIC),(cf.dwEffects & CFE_UNDERLINE),cf.crTextColor,&m_BmpPicker); 
    m_RichEdit.SetWindowText(_T("")); 
    m_RichEdit.SetFocus(); 

 

示例源代码:https://download.csdn.net/download/akof1314/3278764(1.2版本)

 

 

更新日志:

2011年5月14日:发布1.2版本,修改内存泄露问题
2010年11月9日:修改复制粘贴出现的问题

 

 


 

 


http://chatgpt.dhexx.cn/article/XtyDFkSw.shtml

相关文章

方舟服务器文件夹,方舟生存进化文件夹里哪个才是打开游戏 | 手游网游页游攻略大全...

发布时间&#xff1a;2016-04-07 有许多玩家反映在方舟生存进化当中自己在洞穴里只能挖到石头,挖不到水晶,这是怎么回事呢?接下来小编就为大家带来方舟生存进化在洞穴里怎么才能采集到水晶的详细攻略. 答:用铁镐挖才能采集到水晶,用石镐就只能采到石头,希望能帮到 ... 标签&am…

【VC学习】VC2010 Windows Media Player控件的使用技巧

声明&#xff1a;以下博客基于无幻 VC2008 Windows Media Player控件的使用技巧&#xff0c;自行学习整理 附上原地址&#xff1a;http://blog.csdn.net/akof1314/article/details/4900040 本是跟着老师选修课学习&#xff0c;编程都是基于MFC&#xff0c;手动在toolbox里面修…

真Unity3d_分享一个编辑器扩展模型预览视图Mesh Preview Inspector窗口

预览窗口 在 Unity 编辑器界面上可以看到除了 Game 视图、Scene 视图,其他的视图也会出现绘制三维物体的地方,比如检视器的预览窗口,当选中网格时,会对网格进行预览,如下所示: 预览窗口是UnityEditor的底层框架 UnityEditor框架图 可看我之前的博客: https://blog.c…

lookup

这里注意数组 1.{ sum((E3:E11)*(F3*F11) )} 代表数组运算ctrlentershift&#xff0c;因为(E3:E11)*(F3*F11)返回的是数组 2. sum(E3:E11)其中E3:E11也是数组但是直接enter就可以‘ 为什么&#xff1a;因为(E3:E11)是本来就存在的列&#xff0c;(E3:E11)*(F3*F11)是运算出来…

access Dlookup的值写入表

目的 写入供应商名称&#xff0c;自动弹出供应商代码&#xff0c;然后将该条记录增加到表中 方法 在供应商名称的属性表写&#xff0c;不是供应商代码的属性表 在事件过程中写入- Private Sub 供应商名称_AfterUpdate() Me.供应商代码.Value DLookup(“供应商代码”, “Q_…

access-vba之用户登录窗口

界面截图如下: 创建一个窗体设计,然后在设计中找到控件 因为科室更新,带来了用户的更新,所有用户的行来源不指定,但科室的行来源要指定 最后,我们通过VBA实现用户的行来源,这样可以保证在科室变化的情况下,用户实时显示每个科室的人员 Private Sub keshi_AfterUpdate(…

Excel函数公式大全—LOOKUP函数

EXCEL系列文章目录 Excel系列文章是本人亲身经历职场之后萌发的想法&#xff0c;为什么Excel覆盖如此之广&#xff0c;几乎每个公司、学校、家庭都在使用&#xff0c;但是它深藏的宝藏功能却很少被人使用&#xff0c;PQ、BI这些功能同样适用于数据分析&#xff1b;并且在一些需…

Dev的searchLookUpEdit

新添加的searchLookUpEdit的Text属性值为[EditValue is null]&#xff0c;并且无法直接通过修改Text属性来修改&#xff0c;而是可以通过修改它的Properties.NullText属性来修改&#xff0c;比如将该属性赋值为空&#xff0c;则为如下效果&#xff1a; searchLookUpEdit1.Prop…

LOOKUP函数10种经典用法

转载 https://mp.weixin.qq.com/s?__bizMzI0NzA5MTAyNg&mid2653352337&idx1&sn7494ca76ddf66483d8961f84fdbc958e&chksmf2670bacc51082baa65caa5f9af84e2f2121d635a16be1e9fd9557c6d8c68a5fe17bf90a4ce8&scene27 案例1:按照销售金额区间查询提成比例 此法…

LOOKUP函数

数值可升序&#xff1a; lookup&#xff08;查找值&#xff0c;查找区域&#xff0c;返回值&#xff09; lookup&#xff08;查找值&#xff0c;查找区域返回值B2&#xff09; B2的 第一列为查找区域&#xff0c;最后一列返回值 https://wenku.baidu.com/view/ddce993ae45c3b35…

ChatGPT 总结VLOOKUP,LOOKUP,HLOOKUP,XLOOKUP用法与区别

很多人一直都没明白Excel中VLOOKUP&#xff0c;LOOKUP&#xff0c;HLOOKUP&#xff0c;XLOOKUP各查找函数之间的区别到底是什么&#xff0c;也很容易记错。 今天我们就让ChatGPT人工智能来帮助我们总结出各函数的用法。 当涉及到在 Excel 中查找数据时&#xff0c;这些函数都可…

Excel中的HLOOKUP、VLOOKUP、XLOOKUP函数

昨天使用INDEX和MATCH两个EXCEL函数完成了表中数据的快速查找&#xff0c;想一想&#xff0c;EXCEL中还有另外的查找函数&#xff0c;比如HLOOKUP、VLOOKUP、LOOKUP、XLOOKUP函数&#xff0c;那使用它们能不能完成同样的操作呢&#xff1f;   可以的。   仍然是昨天的问题&…

【保姆级】lookup-method标签实践与分析

【Spring源码系列- IOC】 1 【Spring源码】0.安装Gradle环境 2 【Spring源码】1.下载与编译_pom relocation to an other version number is not f 3 【Spring源码】2.试个水先&#xff5e;Debug找到传说中的三级缓存(图解向&#xff0c;堆图预警) 4 【Spring源码】3. x…

实战! excel常用函数中lookup的用法

实战 ! VLOOKUP实操&#xff1a; 图一 图二 当我们拿到图一这样的表&#xff0c;而需要获得图二的数据时候&#xff0c;就可以这样做&#xff1a; 图三 在所需要的单元格输入公式&#xff0c;VLOOKUP([区域],表1,3,0)&am…

Xlookup、Vlookup请走开,万能的Wlookup函数来了!

前天&#xff0c;为大家介绍了关于Vlookup接班人Xlookup函数的介绍&#xff0c;一方面惊叹于Xlookup强大的查找功能&#xff0c;另一方面也担心自已只能远观而不能使用。毕竟付费office365的用户占极少数。点击进入查看>> 那怎么办&#xff1f;下面为大家编写了一个比Xl…

EXCEL基础:XLOOKUP函数的简单使用

实验表格如下&#xff0c;这是一个简单的NBA球星信息的表格&#xff1a; 最简单的使用方法&#xff1a; 1、【简单使用1】需求&#xff1a;通过【杜兰特】姓名&#xff0c;知道其所在的【球队】。 在【I3】单元格输入【XLOOKUP(H3,D2:D8,B2:B8)】&#xff0c;其中H3表示的是要…

ACCESS中Dlookup函数使用

ACCESS中Dlookup函数使用 ACCESS中Dlookup函数使用 Dlookup函数&#xff0c;利用条件从表中筛选查找需要的单项数据&#xff0c;类似EXCEL中的Vlookup函数&#xff0c;用法简单快捷&#xff0c;相对SQL语句要简单。 函数用法 Dlookup(字段名&#xff0c;表或查询名字&#…

详解-脏读、幻读与不可重复读

最近在读 《MySQL 技术内幕 InnoDB 存储引擎》&#xff0c;里面提到的各种概念都很新鲜&#xff0c;以前听说过脏读、幻读、不可重复读&#xff0c;但是对于概念不甚了解&#xff0c;于是查了一下&#xff0c;这里做个笔记。 数据库事务特征 数据库事务特征&#xff0c;即 ACID…

17@MySQL数据库读现象详解(脏读、幻读、不可重复读)

文章目录 MySQL数据库读现象一、数据库的读现象1、脏读&#xff08;dirty read&#xff09;&#xff1a;读取未提交数据【案列详解】2、不可重复读取 (nonrepeatable read)&#xff1a;前后多次读取&#xff0c;数据内容不一致【案列详解】3、幻读(nonrepeatable read)&#xf…

简单解释不可重复读和幻读

之前看了一篇关于数据库隔离级别的文章觉得挺好。http://singo107.iteye.com/blog/1175084 不过很多人对“不可重复读”和“幻读“这两者的区别搞不清楚&#xff0c;包括我自己曾也是迷糊了很久一段时间。 但是&#xff0c;必须说明的是“不可重复读”关注的重点其实在于更新…