Richedit控件和Edit控件類似,,可以用于文本的輸入和編輯,。但兩者在功能上各有側(cè)重點(diǎn)。
Edit控件廣泛使用于對話框中,,用來供用戶輸入少量的文字,,因此加快速度和減少資源的占用是最重要的,各種高級編輯功能不是主要的,,所以Edit控件在短小精悍的同時(shí),,也存在諸多限制,最主要的就是在單行模式下,,能容納的文本不能超過32 KB,,在多行模式下也不能超過64 KB。
Richedit控件則側(cè)重于文字的高級編輯功能,,控件能夠容納的文本長度可以支持操作系統(tǒng)中的最大文件尺寸,并內(nèi)置了很多高級編輯器才具有的特征,,如多級的撤銷或重做,,向前或向后搜索,支持Unicode編輯等,,最重要的就是支持RTF(Rich Text Format)格式的帶段落格式的文本編輯,。由于實(shí)現(xiàn)這些功能的代碼比較復(fù)雜,所以Richedit控件的規(guī)模比較大,以至于Windows將它劃分出來以一個(gè)單獨(dú)的DLL庫文件方式提供,。
到目前為止,,Richedit控件總共有3個(gè)版本,這些版本的功能有所不同,,總的來說高版本包括了低版本的所有功能,,但在某些細(xì)節(jié)的實(shí)現(xiàn)上又有些不同,隨著版本的升高,,一些設(shè)置工作也隨之增多,,所以如果不需要某些特殊功能的話,使用最高的版本可能并不是最適合的,。
1.0版本的Richedit控件對應(yīng)的庫文件是Riched32.dll,,Windows 95只提供1.0版本,文件名中的32是32位版本的意思(不過并沒有一個(gè)Riched16.dll),。從Windows 98開始,,系統(tǒng)中多了一個(gè)2.0版本的Richedit控件,Windows 2000開始則有了3.0版本,。2.0版本和3.0 版本的庫文件名都是Riched20.dll,,同時(shí)Riched32.dll文件仍然存在于系統(tǒng)中,不過Riched20.dll文件名中的20總是讓人迷惑,,很多人第一次使用Richedit控件的時(shí)候誤認(rèn)為Riched32.dll的版本要比Riched20.dll的版本高,。
除了在功能上的不同,不同版本Richedit控件的類名稱也有所不同,,表9.4列出了3個(gè)版本之間的一些區(qū)別,。
表9.4 不同版本Richedit控件之間的區(qū)別
|
1.0版本 |
2.0版本 |
3.0版本 |
DLL庫文件名 |
Riched32.dll |
Riched20.dll |
Riched20.dll |
控件的類名 |
Richedit |
Richedit20A
Richedit20W |
Richedit20A
Richedit20W |
拖放編輯 |
支持 |
支持 |
支持 |
流輸入輸出 |
支持 |
支持 |
支持 |
Unicode編輯 |
不支持 |
支持 |
支持 |
非窗口操作 |
不支持 |
支持 |
支持 |
自動(dòng)URL識(shí)別 |
不支持 |
支持 |
支持 |
加速鍵 |
不支持 |
支持 |
支持 |
分行符 |
CR+LF |
CR |
CR(可模擬1.0版) |
撤銷/重做 |
支持單級 |
支持多級 |
支持多級 |
文本搜索 |
向前搜索 |
向前/向后搜索 |
向前/向后搜索 |
表9.4中列出的僅是一些最重要的區(qū)別,很多細(xì)微的區(qū)別并沒有列出來,,比如每個(gè)版本都可以為文本設(shè)定下劃線,,但3.0版比2.0版又增加了點(diǎn)、劃,、劃-點(diǎn),、劃-點(diǎn)-點(diǎn)等多種樣式的下劃線。
Richedit控件的2.0版本和3.0 版本使用的控件名和類名是相同的,,有時(shí)候?yàn)榱耸褂媚承┌姹咎赜械墓δ?,需要預(yù)先檢測版本號,但Microsoft并沒有提供一個(gè)官方的檢測方法,,所以必須利用一些版本之間的區(qū)別來進(jìn)行檢測(這種方法好像在檢測不同的CPU),,比如,排版樣式功能(TYPOGRAPHY)是3.0版本才支持的,,設(shè)置排版樣式選項(xiàng)使用EM_SETTYPOGRAPHYOPTIONS消息,,如果排版樣式被設(shè)置后能夠再檢測到,,說明控件的版本肯定是3.0的,代碼如下:
invoke SendMessage,hwndRichEdit,EM_SETTYPOGRAPHYOPTIONS,\
TO_SIMPLELINEBREAK,TO_SIMPLELINEBREAK
invoke SendMessage,hwndRichEdit,EM_GETTYPOGRAPHYOPTIONS,1,1
.if eax==0 ,;說明設(shè)置消息沒被處理,,版本是2.0版
mov dwVersion,2
.else
mov dwVersion,3
.endif
另外,也可以通過檢測操作系統(tǒng)來確定Richedit控件的版本,,如2.0版本在Windows 98和Windows NT 4.0中使用,,而Windows 2000使用的是3.0版本。
在本節(jié)中,,用一個(gè)簡單的例子來演示Richedit控件的使用,,包括如何創(chuàng)建控件、如何使用流操作裝入和輸出文件以及如何進(jìn)行文本查找等,,由于篇幅有限,,程序并沒有演示所有的高級編輯功能,程序代碼存放在所附光盤的Chapter09\Richedit目錄中,,其中匯編源代碼Richedit.asm文件的內(nèi)容如下
|