当前位置:C++技术网 > 资讯 > 完美记事项目:2 Windows富文本框控件CRichEditCtrl版本问题

完美记事项目:2 Windows富文本框控件CRichEditCtrl版本问题

更新时间:2015-06-26 12:23:15浏览次数:1+次


    RichEditCtrl有多个版本,主要有1.0、2.0、3.0、4.0、5.0、6.0主要版本,还有每个版本的微升级版本,如2.1和2.5版本。富文本框控件是以Dll形式提供的,除了1.0版本外,其他版本主要的就是在riched20.dll中。而我们主要使用的基本不会再是1.0了,其他的各个微升级版本的dll可能不一样,我们也不用管。只要知道,高级版本(版本号大于2.0,包含2.0)的都使用riched20.dll即可。
     而VS系列中,到VS2010看到的控件也是2.0版本,也就是看到的控件列表中,标明的是2.0版本。但是3.0和其他更高版本提供的支持更好,我们如何使用更高级的版本呢?
     根据以上的分析,我们只要使用了riched20.dll文件即可支持所有高级版本,至于具体是多少版本,就要看系统安装的是哪个版本了。根据目前使用的操作系统来看,最少也是XP了,而3.0的富文本框在XP下是支持的。而更高的,XP可能就不支持了。如果只是使用系统已经安装的版本,最好还是使用3.0版本的富文本框。如果要使用更高特性的支持,那么就需要我们将对应的dll放在我们的项目中,这样也不怕使用的机器上没有安装更高版本的富文本框了。
     因为富文本框是使用riched20.dll额外提供的,不是公共控件,所以也不能直接拖到窗口就直接显示。Windows通用(公共)控件,都在Comctrl32.dll中实现,相关的C++原型声明在commctrl.h。所以使用富文本框要先初始化,保证控件可用。而在《CRichEditCtrl富文本框控件使用入门》中提到的,使用富文本框前,要调用AfxInitRichEdit函数来初始化富文本框。实际上,此函数在内部是去加载riched32.dll去初始化1.0版本的富文本框。虽然拖放到窗口的控件是2.0的,但是此函数初始化只是针对1.0版本的,所以,其他高于1.0版本的特性就无法正常使用了。这是大家需要注意的,1.0版本的所有功能都是可以使用的。
     如果要使用高版本的就需要调用AfxInitRichEdit2函数来初始化,此函数会加载riched20.dll来初始化。旧版本IDE拖入窗口的富文本框是1.0版本的,而新版本的VS系列的,是2.0版本的。要保证你RC中的富文本框是2.0版本或者高级的版本。
     如何确定你的富文本框版本呢?打开RC文件,找到类似的代码:
IDD_RICHEDIT_DIALOG DIALOGEX 0, 0, 503, 314
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX 
| WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "richedit"
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    CONTROL         "",IDC_RICHEDIT21,"RichEdit20W",ES_MULTILINE
 | WS_VSCROLL | WS_TABSTOP,0,33,503,281
END

     我用的版本是VS2008,版本是RichEdit20W,即2.0版本。如果是1.0版本,那么此字符串就是“RICHEDIT”,在这里更新为2.0版本字符串"RichEdit20W"或者"RichEdit20a",前面一个是宽字符版本,后一个是窄字符版本。如果你的项目使用Unicode字符集,那么就是用宽字符版本,如果使用的是多字节的,那么就使用窄字符版本。
     这里要说明的是,如果进程没有初始化通用控件,此函数还会初始化通用控件哦。对于使用高版本的3.0、4.0等版本的使用,有待进一步研究。如果不正确之处,请指正。