一个在RichEdit中添加表情图象的类

2016-01-29 11:58 147 1 收藏

一个在RichEdit中添加表情图象的类,一个在RichEdit中添加表情图象的类

【 tulaoshi.com - C语言心得技巧 】

一个在RichEdit中添加表情图象的类

作者:中原工学院 刘翔

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

下载源代码

说明
  本文根据VC知识库《在线杂志》的第30期的一篇文章:《类似 MSN 信息发送框的制作》,介绍了一个可以在RichEdit中添加表情图象的类CFaceEdit。 以下是使用这个类的程序截图:


图一 CFaceEdit类的使用

使用方法
  我们可以先看一下它的使用方法:

//将对话框类成员变量由CRichEditCtrl改为CFaceEditCFaceEdit m_FaceEdit;//自定义一组表情CString pSymbol[] = {":)", ":(", ";)", ":0", ";-)"};//表情对应的图象IDUINT nIDBmp[] =  {    IDB_BITMAP1, IDB_BITMAP2, IDB_BITMAP3, IDB_BITMAP4, IDB_BITMAP5};m_FaceEdit.Init(5, pSymbol, nIDBmp);......m_FaceEdit.SetText("Visual Studio 包括许多示例:),用以说明开发人员为.NET 平台;)创建的应用程序:-) 。");
也可以以位图文件的形式导入位图:
CString sBmpFile[] = {"reskid.bmp", "ressad.bmp", "resshowoff.bmp", "resquip.bmp", "resmaze.bmp"};m_FaceEdit.Init(5, pSymbol, sBmpFile);...m_FaceEdit.SetText("Visual Studio 包括许多示例:),用以说明开发人员为.NET 平台;)创建的应用程序:-) 。");
  插入图象的主要原理,是由《类似 MSN 信息发送框的制作》一文中提供的InsertBitmap()函数实现的。该函数可以通过指定图象的ID插入图象,或通过图象文件的路径来插入图象。

  那么如何将文本中的字符表情,如::)、;-) 等翻译成图象呢?例如,对于字符串:
"Visual Studio 包括许多示例:),用以说明开发人员为.NET 平台;)创建的应用程序:-)。"

翻译之后,变成:
"Visual Studio 包括许多示例,用以说明开发人员为.NET 平台创建的应用程序。"

如何实现呢?
  在使用InsertBitmap()函数插入图象时,我发现只要先将RichEdit中的某一段文本内容选中,然后再调用InsertBitmap()函数,便可实现将选定内容替换成图象。如:
"Visual Studio 包括许多示例:),用以说明开发人员为.NET 平台;)创建的应用程序:-)。"

再调用InsertBitmap()函数:
"Visual Studio 包括许多示例,用以说明开发人员为.NET 平台;)创建的应用程序:-)。"

  后面的符号只要使用相同的方法处理即可。明白了这一点,想要实现转换图象的功能也就不难了。我们可以使用CRichEditCtrl::SetSel()来实现,不过在此之前,要对各表情字符的一些信息,如位置、表情类型、长度等进行保存,以下是翻译文本的函数的代码:
/*-----------------------------------------------------------------------------*     函数名     :SetTextWithFace**     功能 :实现插入图象的算法函数。*     实现原理:                假设:CString pSymbol[] = {":)", ":(", "#", "AK47", ":-)"};                先将包括表情符号的文本( 如:"haha:)" )直接显示到CRichEditCtrl中,                然后选定其中的表情符号( 如:":)" ),再调用InsertBitmap函数                实现插入,详见注释-----------------------------------------------------------------------------*/void CFaceEdit::SetTextWithFace(CString str){       CString *pstr = new CString[m_nfaceCount];       for(int n = 0; n<m_nfaceCount; n++)       {              pstr[n] = m_pSymbol[n];       }       SetWindowText(str);       int nFaceCount = 0;           //str中共有多少个表情。       stFace faceNode;        //faceNode中存储的是在哪个位置插入,插入哪一个表情。       vector <stFace vecFace;  //vecFac
                        

来源:http://www.tulaoshi.com/n/20160129/1484078.html

延伸阅读
标签: 聊天软件
  看到有的Q友昵称和自动回复信息里可以显示图标,咋整地捏? 简单!偶来告诉你—— 只要在昵称和自动回复中写入表情图标快捷键,就能打造属于你的个性昵称和回复消息了! 例如,想加入太阳的表情图标,则写入/ty即可显示太阳表情图标了。 要知道各个表情对应什么符号,可以在打开表情面板,把鼠标指向表情图...
标签: Web开发
用法:  new Ajax().Request(url,cmd,async,method,postString,title)  参数:  url: 请求页面URL(必填)  cmd: 返回值处理函数(必填)  async: 是否异步 ,(ture|false), 默认true  method: 请求方式,(post|get), 默认get  postString: 请求方式为pos...
标签: PHP
  <?php /* 如有转载,请注明作者 原作者: 何志强 改进: SonyMusic[ sonymusic@163.net ] 文件: ubb.php 备注: 说是改进,其实核心函数parse()已经完全重写了,而且思路也是不一样的。 不过仍是受何志强的例子的启发,而且测试的例子还有URLCHECK等几个函数也是沿用的何志强的程序,谢谢何志强。 目前还没有颜色的功能,但我...
标签: Web开发
结合一个存储过程,将分页做成最简单,请看以下源码 此分页类所操作的存储过程#region 此分页类所操作的存储过程 /**//*********************************************************  *  * 功能强大,配合以下这个存储过程  *  * *******************************************************...
头像表情一直追求的是夸张和搞笑。有时候还要加上一点“酷”。下面头像虽然不是很搞笑但是酷气十足。制作起来也比较简单。都是一些简单的图形加上渐变和高光,再组合起来就可以了。 最终效果 1、新建一个450 * 450像素的文件,背景填充白色,新建一个图层,选择椭圆选框工具,按住Shift 键拉出图1所示的正圆选区。 图1 2、选择渐...

经验教程

986

收藏

44
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部