關於 Rich Edit 控制件

本節將討論下列主題。

Rich Edit 的版本

豐富編輯控件的原始規格是 Microsoft Rich Edit 1.0;目前的規格是 Microsoft Rich Edit 4.1。 每個版本的豐富編輯都是上述版本的超集,不同之處在於只有 Microsoft Rich Edit 1.0 的亞洲組建具有垂直文字選項。 建立豐富的編輯控件之前,您應該呼叫 LoadLibrary 函式,以確認已安裝哪個版本的 Microsoft Rich Edit。

下表顯示哪個 DLL 對應至哪個版本的 Rich Edit。 請注意,檔名並未從 2.0 版變更為 3.0 版。 這可讓 2.0 版升級至 3.0 版,而不會中斷現有的程式代碼。

Rich Edit 版本 DLL Window 類別
1.0 Riched32.dll RICHEDIT_CLASS
2.0 Riched20.dll RICHEDIT_CLASS
3.0 Riched20.dll RICHEDIT_CLASS
4.1 Msftedit.dll MSFTEDIT_CLASS

Rich Edit Version 1.0

Microsoft Rich Edit 1.0 包含下列功能。

功能 描述
文字項目和選取專案 大部分是標準 (系統編輯控制件) 選取和輸入文字。 選取列支援 (選取列是按兩下時,每個段落左邊未標記的區域,會選取該行)。 自動換行和自動文字選取選項。 單鍵、按兩下和三鍵選取。
ANSI (單位元組字元集 (SBCS) 和多位元組位元集 (MBCS)) 編輯 不過,沒有 Unicode 編輯。
基本字元/段落格式設定屬性集 請參閱 CHARFORMATPARAFORMAT
字元格式設定屬性 字型名稱和大小、粗體、斜體、純底線、刪除線、受保護、連結、位移和文字色彩。
段落格式設定屬性 開始縮排、右縮排、後續線條位移、項目符號、對齊方式(左、置中、右)和索引卷標。
向前尋找 包含不區分大小寫和比對的全字選項。
訊息型介面 幾乎是系統編輯控件消息集的超集加上兩個介面:IRichEditOle 和 IRichEditOleCallback。
內嵌物件 需要以 IRichEditOle 和 IRichEditOleCallback 介面為基礎的用戶端共同作業。
右鍵功能表支援 使用 IRichEditOleCallback 介面。
拖放編輯 支援拖放編輯。
Notifications WM_COMMAND傳送至用戶端的訊息,以及一些其他訊息。 這是通用控件通知的超集。
單一層級復原/取消復原 行為類似於系統編輯控制件。 選取 [復原] 會反轉最後一個動作,然後該動作會變成新的 重做 動作。
簡單垂直文字 (僅限亞洲建築)。
輸入法編輯器 (IME) 支援 (僅限亞洲建築)。
使用印表機計量編輯 WYSIWYG Microsoft WordPad 尤其需要此功能。
剪下/複製/貼上/StreamIn/StreamOut 使用純文字 (CF_TEXT) 或 RTF 格式 ,且不含 物件。
C 程式代碼基底 程序代碼是以 C 撰寫,可提供穩固且多用途的基礎。
不同腳本的不同組建 Microsoft Rich Edit 1.0 解決了不同組建的當地語系化問題。

Rich Edit Version 2.0

Microsoft Rich Edit 2.0 已納入數個額外的功能,例如支援 Unicode 和亞洲語言、多層級復原、元件物件模型 (COM) 介面,以及許多 UI 增強功能。

除了 Microsoft Rich Edit 1.0 所提供的 功能之外,Microsoft Rich Edit 2.0 還包含下列功能。

功能 描述
Unicode Unicode 可簡化處理國際文字的工作。 不過,需要努力維持與現有非 Unicode 檔的相容性,也就是轉換至非 Unicode 純文字和 RTF 的能力。
一般國際支援 一般換行演算法(Kinsoku 規則的延伸),簡單字型連結,鍵盤字型切換。
亞洲支援 IME 支援層級 2 (對話框) 和 3 (內嵌)。
尋找向上/尋找向下支援 支援向前和向後搜尋。
雙向支援 這包含在 Microsoft Rich Edit 2.1 中
多層級復原 可延伸的復原架構可讓客戶端參與整個應用程式的復原模型。
Magellan 滑鼠支援 這是滑鼠與滾筒捲動。
雙字型支援 當使用中字型不適合目前的鍵盤時,鍵盤可以自動切換字型,例如《時代新羅馬》中的漢字字元。
智慧型套用 字型變更要求不會將西方字型套用至亞洲字元。
改善的顯示 在同一行出現多個字型時,會使用螢幕外位圖。 例如,這可讓非經常性存取字的最後一個字母被剪掉。
透明度支援 此外,在無視窗模式中。
系統選取色彩 用於選取文字。
自動 URL 辨識 可以檢查一些 URL 格式(例如 HTTP:)
Microsoft Word 編輯 UI 相容性 選取範圍、游標鍵控制板語意。
Word 標準 EOP 段落結尾標記 (CR) 也可以處理歸位字元/換行字元 (CR/LF) (歸位字元,換行字元)。
純文本以及 RTF 功能 單一字元格式和單一段落格式。
單行和多行控件 在第一個段落結尾截斷,而且沒有文字包裝。
快速鍵 支援快捷鍵。
密碼窗口樣式 密碼編輯控制項是透過EM_GETPASSWORDCHAREM_SETPASSWORDCHAR提供。
可調整的架構 若要減少實例大小。
無視窗作業和介面 這會透過 ITextHostITextServices 介面來提供。
COM 雙重介面 文字物件模型 (TOM) 介面。
CHARFORMAT2 新增字型粗細、背景色彩、地區設定標識符、底線類型、上標和下標(除了位移外),已停用效果。 僅針對 RTF 往返,新增字母之間的空間、上方的 twip 大小給 kern 字元組、動畫文字類型、各種效果:字型陰影/外框、所有大寫字母、小上限、隱藏、浮凸、印記和修訂。
PARAFORMAT2 在和 Word 行距前後新增空格。 針對僅限 RTF 往返,新增底紋粗細/樣式、編號起始/樣式/索引卷標、框線空格/寬度/側邊、製表符對齊/領導人、各種 Word 段落效果:RTL 段落、保留、下一頁、分頁符號、no-line-number、no-widow-control、do-not-hyphenate、並排。
更多 RTF 往返 所有 Word FormatFont 和 FormatParagraph 屬性。
程序代碼穩定性和穩定 範例:參數和對象驗證、函式不變、重新進入防護、物件穩定。
強式測試基礎結構 包括廣泛的回歸測試。
提升效能 較小的工作集、更快的載入和重新顯示時間等等。
C++ 程式代碼基底 程序代碼是以 C++ 撰寫,可提供建置 Microsoft Rich Edit 3.0 的堅實基礎。

除了一些例外狀況,Microsoft Rich Edit 2.0 會使用與 Microsoft Rich Edit 1.0 相同的函式、結構和訊息。 不過,請注意下列差異:

  • Microsoft Rich Edit 1.0 視窗類別的名稱是 RichEdit。 Microsoft Rich Edit 2.0 分別有 ANSI 和 Unicode 視窗類別 RichEdit20ARichEdit20W 。 若要指定適當的豐富編輯窗口類別,請使用 richedit.h 檔案根據 UNICODE 編譯旗標的定義所定義的RICHEDIT_CLASS常數。

  • 在 Microsoft Rich Edit 2.0 中,如果您建立 Unicode 豐富編輯控件(預期 Unicode 文字訊息的控制項),則必須在任何傳送至控件的視窗訊息中指定 Unicode 數據。 同樣地,如果您建立 ANSI 豐富編輯控制件,則只會傳送 ANSI 或雙位元組字元集 (DBCS) 數據。 您可以使用 IsWindowUnicode 函式來判斷豐富編輯控件是否使用 Unicode 文字訊息。 請注意,豐富的編輯 COM 介面會使用 Unicode 文字,除非它們遇到代碼頁自變數。

  • Microsoft Rich Edit 1.0 針對段落標記使用 CR/LF 字元組合。 Microsoft Rich Edit 2.0 只使用歸位字元 ('\r')。 Microsoft Rich Edit 3.0 只會使用歸位字元,但可以模擬在這方面的 Microsoft Rich Edit 1.0。

  • Microsoft Rich Edit 2.0 引進了下列新訊息。

    訊息 描述
    EM_AUTOURLDETECT 啟用或停用自動 URL 偵測。
    EM_CANREDO 判斷重做佇列中是否有任何動作。
    EM_GETIMECOMPMODE 擷取目前的輸入法編輯器 (IME) 模式。
    EM_GETLANGOPTIONS 擷取輸入法和亞洲語言支援的選項。
    EM_GETREDONAME 擷取重做佇列中下一個動作的類型名稱。
    EM_GETTEXTMODE 擷取文字模式或復原層級。
    EM_GETUNDONAME 擷取復原佇列中下一個動作的類型名稱。
    EM_REDO 在重做佇列中重做下一個動作。
    EM_SETLANGOPTIONS 設定輸入法和亞洲語言支援的選項。
    EM_SETTEXTMODE 設定文字模式或復原層級。
    EM_SETUNDOLIMIT 設定復原佇列中的動作數目上限。
    EM_STOPGROUPTYPING 停止將連續輸入動作分組到目前的復原動作中。
  • Microsoft Rich Edit 2.0 引進了下列新結構。

    結構 描述
    CHARFORMAT2 包含字元格式設定的相關信息。
    PARAFORMAT2 包含段落格式設定的相關信息。
  • 下列訊息僅支援 Microsoft Rich Edit 1.0 的亞洲語言版本。 任何更新版本的 Rich Edit 都不支持它們。

    EM_CONVPOSITION

    EM_GETIMECOLOR

    EM_GETIMEOPTIONS

    EM_GETPUNCTUATION

    EM_GETWORDWRAPMODE

    EM_SETIMECOLOR

    EM_SETIMEOPTIONS

    EM_SETPUNCTUATION

    EM_SETWORDWRAPMODE

Rich Edit 3.0 版

Microsoft Rich Edit 3.0 是單一、可調整、全球的 DLL,可在小型套件中提供與 Word 的高效能和相容性。 Microsoft Rich Edit 3.0 的新功能包括更豐富的文字、縮放、字型系結、更強大的 IME 支援,以及豐富的複雜腳本支援(雙向、索引和泰文)。

Microsoft Rich Edit 3.0 除了 Rich Edit 2.0 版所提供的功能之外,還包含下列功能。

功能 描述
Zoom 縮放比例會以比例來指定。
段落編號 (單一層級) 數位、上下字母或羅馬數位。
簡單數據表 可以刪除和插入數據列,但無法重設大小,也不會在儲存格內換行。 開啟進階印刷樣式(請參閱 EM_GETTYPOGRAPHYOPTIONS),Microsoft Rich Edit 3.0 可以對齊置中或向右排清的數據行,並包含小數點。 單元格是由索引標籤模擬,因此文字索引標籤和歸位字元會由空白取代。
標準樣式和標題樣式 EM_SETPARAFORMAT和文字物件模型 (TOM) 介面支援內建的一般樣式和標題樣式 1 到 9。
更多底線類型 已新增虛線、虛線點、虛線點和底線。
底線著色 底線文字可以標記 15 個檔案選項的其中一個,以加底線色彩。
隱藏文字 以 CHARFORMAT2 屬性標示。 方便往返(寫出檔案中所讀取的內容)通常不應該顯示的資訊。
更多預設快捷鍵 這些快速鍵的運作與 Word 中的索引鍵相同。 例如,歐洲輔色死鍵(僅限美國鍵盤)。 數字熱鍵 (CTRL+L) 會迴圈查看可用的編號選項,從專案符號開始。
HexToUnicode IME 允許使用者使用熱鍵在十六進位和 Unicode 之間轉換。
智慧引號 這項功能是透過 CTRL+ALT+' 針對美國鍵盤來開啟和關閉。
軟連字元 針對純文本,請使用 0xAD。 針對 RTF,請使用 -。
斜體游標 此外,滑鼠游標會在 URL 上方變更為手部。
進階印刷樣式選項 Microsoft Rich Edit 3.0 可以使用進階印刷樣式選項來進行斷行和顯示(請參閱 EM_GETTYPOGRAPHYOPTIONS)。 這個優雅的選項主要是為了方便處理複雜的腳本(雙向、索引和泰文)。 此外,簡單腳本也發生了許多改善。 範例包括:
  • 置中、右、小數點索引標籤
  • 完全對齊的文字
  • 底線平均,即使相鄰文字執行有不同的字型大小,也能提供統一底線。
複雜字集支援 Microsoft Rich Edit 3.0 支援雙向(含有阿拉伯文和/或希伯來文的文字與其他腳本混合)、索引(如 Devangari 等印度腳本)和泰文文字。 為了支持這些複雜的腳本,會使用進階印刷樣式和 Uniscribe 元件。
字型系結 Microsoft Rich Edit 3.0 會自動為顯然不屬於目前字元集戳記的字元選擇適當的字型。 這可藉由將字元集指派給文字執行,並將字型與這些字元集產生關聯來完成。 如需詳細資訊,請參閱 字型系結
字元集特定的純文字讀取/寫入選項 這允許使用一個字元集來讀取檔案,並使用不同的字元集寫入。
UTF-8 RTF 建議您進行剪下、複製和貼上作業。 此檔案格式比一般 RTF 更精簡、更快且與 Unicode 相容。
Microsoft Office 9 IME 支援 (IME98) 這個功能更強大的 IME 功能已分成獨立的模組。 功能包括:
  • 重新轉換 在舊版中,用戶必須先刪除最終字串,然後輸入新字元串以取得正確的候選專案。 這項新功能可讓使用者將最終字串轉換回組合模式,進而輕鬆選取不同的候選字串。
  • 文件摘要 此功能提供 IME98 與目前段落的文字,這有助於 IME98 在輸入期間執行更精確的轉換。
  • 滑鼠操作 這項功能可在輸入期間,更妥善地控制候選專案和UI視窗。
  • 插入點位置 此功能提供目前的插入號和行資訊,IME98 用來定位 UI 視窗(例如候選清單)。
主動輸入法管理員 (IMM) 支援 使用者可以叫用 Active IMM 物件,讓使用者在美國系統上輸入亞洲字元。
HexToUnicode 支援 使用者可以使用熱鍵,在十六進位表示法和 Unicode 之間轉換。
更多 RTF 往返 從檔案讀取的 RTF 文字將會完整地寫回。
改善 1.0 相容性模式 Microsoft Rich Edit 3.0 可以模擬 Microsoft Rich Edit 1.0 行為。 例如,可以在 MBCS 與 Unicode 字元位置 (cp) 對應之間變更。
增加凍結控制 顯示可以凍結在多個 API 呼叫上,然後取消凍結以顯示更新。
增加復原控件 復原可以暫停和繼續 (輸入法需求)。
增加/減少字型大小 將字型大小增加或減少為六個標準值之一(12、28、36、48、72 和 80 點)。

Rich Edit 4.1 版

Microsoft Rich Edit 4.1 的視窗類別MSFTEDIT_CLASS。 Microsoft Rich Edit 4.1 的新功能包括連字元、頁面旋轉和文字服務架構 (TSF) 支援。

Microsoft Rich Edit 4.1 除了 Rich Edit 3.0 版所提供的功能之外,還包含下列功能。

功能 描述
連字元 透過下列 API 支援連字元:HyphenateProcEM_SETHYPHENATEINFOEM_GETHYPHENATEINFO。
頁面旋轉 透過EM_SETPAGEROTATE和EM_GETPAGEROTATE,支援由上至下和由下到上版面配置。
文字服務架構支援
其他輸入法支援
其他 EM_SETEDITSTYLE 設定 除了 TSF 設定之外,還有排除 IME、設定雙向文字流程、使用草稿模式字型等等的新設定。
其他 EM_SETCHARFORMAT 設定 新的旗標可讓客戶端設定指定 LCID 或字元集的預設字型和字型、設定控制元件的預設字型、防止鍵盤切換以符合字型等等。
將輸入限制為 ANSI 文字 在 EM_SETTEXTMODE 中使用TM_SINGLECODEPAGE可防止 Unicode 輸入進入 Rich Edit 控制件。
不支援的 RTF 關鍵詞通知 當有不支援的 RTF 關鍵詞時, EN_LOWFIRTF會警告應用程式。
其他語言支援 其他語言包括亞美尼亞文、迪維希、泰魯古等。
改善的數據表支援 功能包括:在儲存格內換行、透過 RTF 改善處理,以及改善流覽。
ES_VERTICAL 支援ES_VERTICAL視窗樣式。
WM_UNICHAR支援 若要將 Unicode 字元傳送或張貼至 ANSI 視窗,請使用 WM_UNICHAR。 它相當於 WM_CHAR,但它使用 (UTF)-32。

不支援的編輯控制項功能

豐富的編輯控制項支援多行編輯控制元件的大部分功能,但不支援所有功能。 本節列出豐富編輯控件不支援的編輯控件訊息和窗口樣式

下列訊息會由編輯控件處理,但 不是 由豐富的編輯控件處理。

不支援的訊息 註解
EM_FMTLINES 不支援。
EM_GETHANDLE 豐富的編輯控制項不會將文字儲存為簡單的字元數位。
EM_GETIMESTATUS 不支援。
EM_GETMARGINS 不支援。
EM_SETHANDLE 豐富的編輯控制項不會將文字儲存為簡單的字元數位。
EM_SETIMESTATUS 不支援。
EM_SETMARGINS Microsoft Rich Edit 3.0 中支援。
EM_SETRECTNP 不支援。
EM_SETTABSTOPS 改用EM_SETPARAFORMAT 訊息。 Microsoft Rich Edit 3.0 中支援。
WM_CTLCOLOR 改用EM_SETBKGNDCOLOR 訊息。
WM_GETFONT 改用EM_GETCHARFORMAT 訊息。

下列窗口樣式與多行編輯控件搭配使用,但不適用於豐富的編輯控件:ES_LOWERCASEES_UPPERCASEES_OEMCONVERT。

Rtf 編輯快捷鍵

豐富的編輯控制項支援下列快捷鍵。

索引鍵 Operations 註解
Shift+Backspace 在 bidi 鍵盤上產生 LRM/LRM BiDi 特定
Ctrl+Tab 定位字元
Ctrl+Clear 全選
Ctrl+數位板 5 全選
Ctrl+A 全選
Ctrl+E 置中對齊
Ctrl+J 對齊方式
Ctrl+R 靠右對齊
Ctrl+L 靠左對齊
Ctrl+C 複本
Ctrl+V 貼上
Ctrl+X 剪下
Ctrl+Z 復原
Ctrl+Y 重做
Ctrl+'+' (Ctrl+Shift+'=') 上標
Ctrl+'=' 下標
Ctrl+1 行距 = 1 行。
Ctrl+2 行距 = 2 行。
Ctrl+5 行距 = 1.5 行。
Ctrl+' (單引號) 輔色尖銳 按下短切鍵之後,請按適當的字母(例如,e 或 u)。 這僅適用於英文、法文、德文、義大利文和西班牙文鍵盤。
Ctrl+' (墳墓) 輔色墳墓 請參閱 Ctrl+' 批注。
Ctrl+~ (波浪圖) 輔色波浪線 請參閱 Ctrl+' 批注。
Ctrl+;(分號) 輔色 umlaut 請參閱 Ctrl+' 批注。
Ctrl+Shift+6 輔色插入號(圓角) 請參閱 Ctrl+' 批注。
Ctrl+、(逗號) 輔色 cedilla 請參閱 Ctrl+' 批注。
Ctrl+Shift+' (單引號) 啟用智慧引號
退格鍵 如果文字受到保護,請嗶聲,不要刪除它。 否則,請刪除前一個字元。
Ctrl+退格鍵 刪除上一個字。 這會產生VK_F16程序代碼。
F16 與 Backspace 相同。
Ctrl+Insert 複本
Shift+Insert 貼上
插入​​ 覆寫 DBCS 不會覆寫。
Ctrl+向左鍵 將游標向左移動一個字。 在 bidi 鍵盤上,這取決於文字的方向。
Ctrl+向右鍵 將游標向右移動一個字。 請參閱 Ctrl+向左鍵批注。
Ctrl+左移 靠左對齊 在 BiDi 檔中,這是由左至右閱讀順序。
Ctrl+右移 靠右對齊 在 BiDi 檔中,這是由右至左閱讀順序。
Ctrl+向上鍵 移至上方的行。
Ctrl+向下鍵 移至下方的行。
Ctrl+Home 移至文件的開頭。
Ctrl+End 移至文件結尾。
Ctrl+Page Up 向上移動一頁。 如果在 SystemEditMode 和單行控件中,則不會執行任何動作。
Ctrl+Page Down 向下移動一頁。 請參閱 Ctrl+Page Up 批注。
Ctrl+Delete 刪除下一個單字或選取的字元。
Shift+Delete 剪下選取的字元。
Esc 停止拖放。 執行文字拖放時。
Alt+Esc 變更使用中的應用程式。
Alt+X 將插入點前面的 Unicode 十六進位值轉換為對應的 Unicode 字元。
Alt+Shift+X 將插入點前面的 Unicode 字元轉換為對應的 Unicode 十六進位值。
Alt+0xxx (數位板) 如果 xxx 大於 255,則插入 Unicode 值。 當 xxx 小於 256 時,會根據目前的鍵盤插入 ASCI 範圍文字。 必須輸入十進位值。
Alt+Shift+Ctrl+F12 十六進位到 Unicode。 如果 Alt+X 已用於另一個用途,則為 。
Alt+Shift+Ctrl+F11 選取的文字將會輸出至調試程序視窗,並儲存至 %temp%\DumpFontInfo.txt。 僅針對 [偵錯] (需要在 Win.ini 中設定 Flag=8)
Ctrl+Shift+A 設定所有上限。
Ctrl+Shift+L Fiddle 項目符號樣式。
Ctrl+Shift+向右鍵 增加字型大小。 字型大小在範圍 4pt-11pt 中變更 1 點;by 2points for 12pt-28pt;它會從 28pt -> 36pt - 48pt ->> 72pt -> 80pt 變更;它會在範圍 80pt - 1630pt 中變更 10 點;最大值為 1638。
Ctrl+Shift+向左鍵 縮小字型大小。 請參閱 Ctrl+Shift+向右鍵批注。

概念

使用 Rich Edit 控制件

無窗口豐富編輯控制件