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控件之间的区别

 

  1.0版本 2.0版本 3.0版本 DLL库文件名 Riched32.dll Riched20.dll Riched20.dll 控件的类名 Richedit Richedit20A

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文件的内容如下