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

来源:互联网 发布:pe软件 编辑:程序博客网 时间:2024/06/06 00:26

本文作者:无幻
博客地址: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(); 

 

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

 

更新日志:

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

 


 

原创粉丝点击