本文作者:无幻
博客地址:http://blog.youkuaiyun.com/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控件,分别作为聊天编辑框和聊天记录框,设置它们的属性其Multiline为True,want return 为True,Vertical Scroll为True,把聊天编辑框做为聊天记录框的下一个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.youkuaiyun.com/download/akof1314/3278764(1.2版本)
更新日志:
2011年5月14日:发布1.2版本,修改内存泄露问题
2010年11月9日:修改复制粘贴出现的问题