Windows32位汇编语言教程第9章9.4 使用Richedit控件(1) - 灵魂网络
来源:百度文库 编辑:神马文学网 时间:2024/05/23 15:15:59
Richedit控件和Edit控件类似,可以用于文本的输入和编辑。但两者在功能上各有侧重点。
Edit控件广泛使用于对话框中,用来供用户输入少量的文字,因此加快速度和减少资源的占用是最重要的,各种高级编辑功能不是主要的,所以Edit控件在短小精悍的同时,也存在诸多限制,最主要的就是在单行模式下,能容纳的文本不能超过32 KB,在多行模式下也不能超过64 KB。
Richedit控件则侧重于文字的高级编辑功能,控件能够容纳的文本长度可以支持操作系统中的最大文件尺寸,并内置了很多高级编辑器才具有的特征,如多级的撤销或重做,向前或向后搜索,支持Unicode编辑等,最重要的就是支持RTF(Rich Text Format)格式的带段落格式的文本编辑。由于实现这些功能的代码比较复杂,所以Richedit控件的规模比较大,以至于Windows将它划分出来以一个单独的DLL库文件方式提供。
到目前为止,Richedit控件总共有3个版本,这些版本的功能有所不同,总的来说高版本包括了低版本的所有功能,但在某些细节的实现上又有些不同,随着版本的升高,一些设置工作也随之增多,所以如果不需要某些特殊功能的话,使用最高的版本可能并不是最适合的。
1.0版本的Richedit控件对应的库文件是Riched32.dll,Windows 95只提供1.0版本,文件名中的32是32位版本的意思(不过并没有一个Riched16.dll)。从Windows 98开始,系统中多了一个2.0版本的Richedit控件,Windows 2000开始则有了3.0版本。2.0版本和3.0 版本的库文件名都是Riched20.dll,同时Riched32.dll文件仍然存在于系统中,不过Riched20.dll文件名中的20总是让人迷惑,很多人第一次使用Richedit控件的时候误认为Riched32.dll的版本要比Riched20.dll的版本高。
除了在功能上的不同,不同版本Richedit控件的类名称也有所不同,表9.4列出了3个版本之间的一些区别。
表9.4 不同版本Richedit控件之间的区别
Richedit20W Richedit20A
Richedit20W 拖放编辑 支持 支持 支持 流输入输出 支持 支持 支持 Unicode编辑 不支持 支持 支持 非窗口操作 不支持 支持 支持 自动URL识别 不支持 支持 支持 加速键 不支持 支持 支持 分行符 CR+LF CR CR(可模拟1.0版) 撤销/重做 支持单级 支持多级 支持多级 文本搜索 向前搜索 向前/向后搜索 向前/向后搜索
表9.4中列出的仅是一些最重要的区别,很多细微的区别并没有列出来,比如每个版本都可以为文本设定下划线,但3.0版比2.0版又增加了点、划、划-点、划-点-点等多种样式的下划线。
Richedit控件的2.0版本和3.0 版本使用的控件名和类名是相同的,有时候为了使用某些版本特有的功能,需要预先检测版本号,但Microsoft并没有提供一个官方的检测方法,所以必须利用一些版本之间的区别来进行检测(这种方法好像在检测不同的CPU),比如,排版样式功能(TYPOGRAPHY)是3.0版本才支持的,设置排版样式选项使用EM_SETTYPOGRAPHYOPTIONS消息,如果排版样式被设置后能够再检测到,说明控件的版本肯定是3.0的,代码如下:
invoke SendMessage,hwndRichEdit,EM_SETTYPOGRAPHYOPTIONS,\
TO_SIMPLELINEBREAK,TO_SIMPLELINEBREAK
invoke SendMessage,hwndRichEdit,EM_GETTYPOGRAPHYOPTIONS,1,1
.if eax==0 ;说明设置消息没被处理,版本是2.0版
mov dwVersion,2
.else
mov dwVersion,3
.endif
另外,也可以通过检测操作系统来确定Richedit控件的版本,如2.0版本在Windows 98和Windows NT 4.0中使用,而Windows 2000使用的是3.0版本。
在本节中,用一个简单的例子来演示Richedit控件的使用,包括如何创建控件、如何使用流操作装入和输出文件以及如何进行文本查找等,由于篇幅有限,程序并没有演示所有的高级编辑功能,程序代码存放在所附光盘的Chapter09\Richedit目录中,其中汇编源代码Richedit.asm文件的内容如下