格式文本框(Rich Edit)使用实例

开发平台:visual studio 2010

(1).新建一个基于对话框的MFC,命名为"RichEditDemo"

(2)在主对话框上添加一个Rich Edit控件,将其ID修改为"IDC_EDIT",

(3)在CRichEditDemoApp的InitInstance函数中添加初始化代码:

//初始化Rich Edit控件
AfxInitRichEdit2();

注意visual studio 2010使用的是RichEdit2.0,所以这里AfxInitRichEdit2,否则使用AfxInitRichEdit

并通过类向导添加一个控件型成员变量,变量名为"m_edit".

(4).在主对话框上添加4个按钮控件,控件ID分别为"IDC_BTN_COLOR"."IDC_BTN_FONT"."IDC_BTN_SAVE"."IDC_BTN_LOAD".按钮文本分别为"颜色""字体""保存""打开"

通过类向导为上述4个按钮添加单击事件响应函数.代码如下"

//颜色按钮的响应函数

void CRichEditDemoDlg::OnBnClickedBtnColor()
{
    // TODO: 在此添加控件通知处理程序代码
    //自定义并初始化文字格式结构
    CHARFORMAT cf={0};
    cf.cbSize=sizeof(cf);
    //取得文本框当前文字的格式
    m_edit.GetSelectionCharFormat(cf);
    //创建颜色对话框,并用取得的文字格式初始化对话框
    CColorDialog dlg(cf.crTextColor,CC_FULLOPEN,this);
    //显示对话框,选择颜色
    if(dlg.DoModal()==IDOK)
    {
       //取得用户所选颜色
       cf.crTextColor=dlg.GetColor();
        //将文本格式信息设置到文本框当前文本
       cf.dwMask=CFM_COLOR;
       cf.dwEffects=0;
       m_edit.SetSelectionCharFormat(cf);
    }

}

//字体按钮的响应函数

void CRichEditDemoDlg::OnBnClickedBtnFont()
{
    // TODO: 在此添加控件通知处理程序代码
    //定义并初始化文字格式结构
    CHARFORMAT cf={0};
    cf.cbSize=sizeof(cf);
    //取得文本框当前文字的格式
    m_edit.GetSelectionCharFormat(cf);
    //创建字体对话框,并用取得的文字格式初始化对话框
    CFontDialog dlg(cf);
    //显示对话框,选择字体信息
    if(dlg.DoModal()==IDOK)
    {
       //取得用户所选字体信息
       dlg.GetCharFormat(cf);
       //将文本格式信息设置到文本框当前文本
       cf.dwMask&=~CFM_COLOR;
       m_edit.SetSelectionCharFormat(cf);
    }
}

//保存按钮的响应函数

void CRichEditDemoDlg::OnBnClickedBtnSave()
{
    // TODO: 在此添加控件通知处理程序代码
    //显示一个保存文件对话框,以获取文本名
    CFileDialog dlg(FALSE,_T("rtf"),NULL,
       OFN_PATHMUSTEXIST |
       OFN_OVERWRITEPROMPT |
       OFN_HIDEREADONLY,
       _T("*.rtf | *.rtf | *.* | *.*||" ),this);
    if(dlg.DoModal()!=IDOK)
       return;
    //打开或创建文件
    CString strFile=dlg.GetPathName();
    CFile file;
    if(!file.Open(strFile,CFile::modeCreate | CFile::modeWrite))
    {
       AfxMessageBox(_T("打开或创建文件夹失败!"));
       return;
    }
    //生成回调数据
    EDITSTREAM es={0};
    es.dwCookie=(DWORD)&file;
    es.pfnCallback=StreamOutProc;
    //根据文件后缀,判断要保存RTF格式还是纯文本格式
    int nFormat;
    if(_tcsicmp(dlg.GetFileExt(),_T("rtf"))==0)
      nFormat=SF_RTF;
    else
      nFormat=SF_TEXT;
    //从控件获取数据
    m_edit.StreamOut(nFormat,es);
    //关闭文件
    file.Close();

}

//打开按钮响应函数

void CRichEditDemoDlg::OnBnClickedBtnLoad()
{
    // TODO: 在此添加控件通知处理程序代码
    //显示一个打开对话框,以选择要打开的文件
    CFileDialog dlg(TRUE,NULL,NULL,
       OFN_FILEMUSTEXIST, _T("*.rtf | *.rtf | *.* | *.*||" ),this);
    if(dlg.DoModal()!=IDOK)
       return;
    //打开文件
    CString strFile=dlg.GetPathName();
    CFile file;
    if(!file.Open(strFile,CFile::modeRead))
    {
       AfxMessageBox(_T("打开文件失败!"));
       return;
    }
    //清空文本框
    m_edit.SetWindowText(_T(""));
    //生成回调数据
    EDITSTREAM es={0};
    es.dwCookie=(DWORD)&file;
    es.pfnCallback=streamInProc;
    //判断文件后缀,以决定是否加载RTF格式文本
    int nFormat;
    if(_tcsicmp(dlg.GetFileExt(),_T("rtf"))==0)
       nFormat=SF_RTF;
    else
       nFormat=SF_TEXT;
    //向控件传输数据
    m_edit.StreamIn(nFormat,es);
    //关闭文件
    file.Close();

}

(5).在主对话框类(RichEditDemoDlg.h)添加两个静态函数.作为RICH EDIT控件的输入.输入数据回调函数.声明如下:

protected:
static DWORD CALLBACK StreamOutProc(
    DWORD dwCookie,LPBYTE pbBuff,LONG cb,LONG *pcb);
static DWORD CALLBACK streamInProc(
    DWORD dwCookie,LPBYTE pbBuff,LONG cb,LONG *pcb);

(6)在RichEditDemoDlg.cpp中添加上述两个函数的实现代码:

//向控件传输数据的回调函数
DWORD CALLBACK CRichEditDemoDlg::streamInProc(
    DWORD dwCookie,LPBYTE pbBuff,LONG cb,LONG * pcb)
{
    //取得传进来的文件指针
    CFile *pFile=(CFile*)dwCookie;
    //从文件读取数据到缓冲
    *pcb=pFile->Read(pbBuff,cb);
    return 0;
}
//从控件传输数据的回调函数
DWORD CALLBACK CRichEditDemoDlg::StreamOutProc(
    DWORD dwCookie,LPBYTE pbBuff,LONG cb,LONG *pcb)
{
    //取得传进来的文件
    CFile *pFile=(CFile*)dwCookie;
    //向文件中写入数据
    pFile->Write(pbBuff,cb);
    *pcb=cb;
    return 0;
}

 

我引用了别人写的一个类,error C2664: “BuildCommDCBW”: 不能将参数 1 从“char *”转换为“LPCWSTR”经常出现这样的错误,但我用同样的编译器编译别人的程序很正常,这是为什么啊?

因为你们两个的工程属性不一样,你是Unicode估计

方法1:

项目属性->常规->使用字符集 改为 使用多字节字符集

方法2:

  将char*换为TCHAR *


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值