关于CRichEditCtrl

    我在程序中使用CRichEditCtrl作为基类,创建了一个模板编辑控件,从最早的1.0到最新的3.0,其中需要注意的一些问题总结如下:
1、在创建CRichEditCtrl之前,或者在显示包含CRichEditCtrl对话框之前,必须首先调用 AfxInitRichEdit。如果是使用2.0版本的控件,则需要调用 AfxInitRichEdit2。
2、对于1。0版本的CRichEditCtrl,对于的DLL为RichEdit32.DLL,2.0和3.0版本的控件对应的DLL为RICHEDIT20.DLL。
AfxInitRichEdit函数会加载 RichEdit32.DLL,而 AfxInitRichEdit2会加载RICHEDIT20.DLL。
3、如果在VC2005中的对话框资源中添加一个RICHEDIT控件则在资源文件中控件类的名称为
RichEdit20a。此时如果希望调用1.0版本,则需要将资源中控件的类名称由RichEdit20a替换为RICHEDIT。
4、1。0版本的控件默认支持多字节字符串,而2。0和3.0则默认支持UNICODE。
5、如果应用程序的编译选项设置为UNICODE,则通过GetWindowText()函数得到的字符串是UNICODE,如果编译选项是多字节,则GetWindowText()函数的到的是非UNiCode字符串。
6、3.0版本的RichEditCtrl通过GetSel和SetSel函数默认的字符串格式是UniCode。
7、如果希望在多字节的程序中以UniCode的方式返回CRichEditCtrl控件中的文本,则不能使用GetWindowText()函数,而应该通过消息EM_GETTEXTEX href="../../../../../css/ie4.css" type="text/css" rel="stylesheet"> href="../../../../../css/inetsdk.css" type="text/css" rel="stylesheet"> <script> // </script><script language="JavaScript1.2"> // </script><script language="JavaScript1.2"> // </script><script language="JavaScript1.2" src="../../../../../code/common.js"> // </script><script language="JavaScript1.2" src="../../../../../code/browdata.js"> // </script><script language="JavaScript1.2"> // </script> href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet"> :
// 得到编辑控件的Unicode格式的文本
void CMyEditBase::GetWindowTextUniCode(CStringW &sText)
{
    GETTEXTEX gt;
    gt.cb=1024*1024;
    gt.codepage=1200;
    gt.flags=GT_DEFAULT;
    gt.lpDefaultChar=NULL;
    gt.lpUsedDefChar=NULL;

    CStringW sBuff;
    this->SendMessage(EM_GETTEXTEX,(WPARAM)&gt,(LPARAM)sBuff.GetBuffer(1024*1024));
    sBuff.ReleaseBuffer();
    sText=sBuff;
}
8、如果希望在多字节的程序中以UniCode字符串设置CRichEditCtrl控件的文本,不应该使用SetWindowText,而应该通过消息EM_SETTEXTEX href="../../../../../css/ie4.css" type="text/css" rel="stylesheet"> href="../../../../../css/inetsdk.css" type="text/css" rel="stylesheet"> <script> // </script><script language="JavaScript1.2"> // </script><script language="JavaScript1.2"> // </script><script language="JavaScript1.2" src="../../../../../code/common.js"> // </script><script language="JavaScript1.2" src="../../../../../code/browdata.js"> // </script><script language="JavaScript1.2"> // </script> href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet"> :

void CMyEditBase::SetWindowTextUniCode(CStringW strText)
{
    SETTEXTEX st;
    
    st.codepage=1200;
    st.flags=GT_DEFAULT;

    this->SendMessage(EM_SETTEXTEX,(WPARAM)&st,(LPARAM)strText.GetBuffer());
    
}
9、如果希望在多字节程序中以UniCode字符串替换CRichEditCtrl中的文本,则应该使用消息EM_SETTEXTEX:

//以UniCode的文本对选中的区域进行替换操作
void CMyEditBase::ReplaceSelUniCode(CStringW strText,BOOL bCanUndo )
{
    SETTEXTEX st;
   
    st.codepage=1200;
    if(bCanUndo)
        st.flags=ST_SELECTION|ST_KEEPUNDO;//替换选择部分ST_KEEPUNDO
    else
        st.flags=ST_SELECTION;

    this->SendMessage(EM_SETTEXTEX,(WPARAM)&st,(LPARAM)strText.GetBuffer());
   

因为消息EM_SETTEXTEX实际上包含了EM_SETTEXT和EM_REPLACESEL的功能,并且可以支持Unicode。 href="../../../../../css/ie4.css" type="text/css" rel="stylesheet"> href="../../../../../css/inetsdk.css" type="text/css" rel="stylesheet"> <script> // </script><script language="JavaScript1.2"> // </script><script language="JavaScript1.2"> // </script><script language="JavaScript1.2" src="../../../../../code/common.js"> // </script><script language="JavaScript1.2" src="../../../../../code/browdata.js"> // </script><script language="JavaScript1.2"> // </script> href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet">



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值