The original specification for rich edit controls is Microsoft Rich Edit 1.0; the current specification is Microsoft Rich Edit 4.1. Each version of rich edit is a superset of the preceding one, except that only Asian builds of Microsoft Rich Edit 1.0 have a vertical text option. Before creating a rich edit control, you should call the LoadLibrary function to verify which version of Microsoft Rich Edit is installed.
The following table shows which DLL corresponds with which version of Rich Edit. Note that the name of the file did not change from version 2.0 to version 3.0. This allows version 2.0 to be upgraded to version 3.0 without breaking existing code.
Rich Edit version
DLL
Window Class
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 includes the following features.
Feature
Description
Text entry and selection
Mostly standard (system-edit control) selection and entry of text. Selection bar support (the selection bar is an unmarked area to the left of each paragraph that when clicked, selects the line). Word-wrap and auto-word-select options. Single-, double-, and triple-click selection.
ANSI (single-byte character set (SBCS) and multibyte character set (MBCS)) editing
However, there is no Unicode editing.
Basic set of character/paragraph formatting properties
WM_COMMAND messages sent to client plus a number of others. This is a superset of common-control notifications.
Single-level undo/redo
Behaves similarly to the system edit control. Selecting Undo reverses the last action, and that action then becomes the new Redo action.
Simple vertical text
(Asian builds only).
Input Method Editor (IME) support
(Asian builds only).
WYSIWYG editing using printer metrics
This feature is needed for Microsoft WordPad, in particular.
Cut/Copy/Paste/StreamIn/StreamOut
With plain text (CF_TEXT) or Rich Text Format (RTF) with and without objects.
C code base
The code is written in C, which provides a solid and versatile foundation.
Different builds for different scripts
Microsoft Rich Edit 1.0 addresses localization issues with different builds.
Rich Edit Version 2.0
Microsoft Rich Edit 2.0 incorporated several additional features, such as support for Unicode and Asian languages, multilevel Undo, Component Object Model (COM) interfaces, and numerous UI enhancements.
Microsoft Rich Edit 2.0 includes the following features in addition to the features provided by Microsoft Rich Edit 1.0.
Feature
Description
Unicode
Unicode eases the effort in handling international text. However effort is needed to maintain compatibility with existing non-Unicode documents that is, the ability to convert to/from non-Unicode plain and rich text.
General international support
General line breaking algorithm (extension of Kinsoku rules), simple font linking, keyboard font switching.
Asian support
Level 2 (dialog box) and 3 (inline) is supported in IMEs.
Find Up/Find Down support
Searching forward and backward is supported.
Bidirectional support
This is included in Microsoft Rich Edit 2.1
Multilevel undo
An extensible Undo architecture allows client to participate in application-wide Undo model.
Magellan mouse support
This is the mouse with a roller for scrolling.
Dual-font support
The keyboard can automatically switch fonts when the active font is inappropriate for current keyboard, for example, Kanji characters in Times New Roman.
Smart font apply
Font change request does not apply Western fonts to Asian characters.
Improved display
An off-screen bitmap is used when multiple fonts occur on the same line. This allows, for example, the last letter of the word cool not to be chopped off.
Transparency support
Also in windowless mode.
System selection colors
Used for selecting text.
Automatic URL recognition
Can check for a number of URL formats (for example, http:)
Microsoft Word edit UI compatibility
Selection, cursor-keypad semantics.
Word standard EOP
The end-of-paragraph mark (CR) can also handle carriage return/line feed (CR/LF) (carriage return, line feed).
Plain-text as well as rich-text functionality
Single-character format and single-paragraph format.
Single-line and multiline controls
Truncate at first end-of-paragraph and no wordwrap.
Added font weight, background color, locale identifier, underline type, superscript and subscript (in addition to offset), disabled effect. For RTF roundtripping only, added amount to space between letters, twip size above which to kern character pair, animated-text type, various effects: font shadow/outline, all caps, small caps, hidden, embossed, imprint, and revised.
PARAFORMAT2
Added space before and after and Word line spacing. For RTF roundtripping only, added shading weight/style, numbering start/style/tab, border space/width/sides, tab alignment/leaders, various Word paragraph effects: RTL paragraph, keep, keep-next, page-break-before, no-line-number, no-widow-control, do-not-hyphenate, side-by-side.
More RTF roundtripping
All of the Word FormatFont and FormatParagraph properties.
Code stability and stabilization
Examples: parameter and object validation, function invariants, reentrancy guards, object stabilization.
Strong testing infrastructure
Including extensive regressions tests.
Improved performance
Smaller working set, faster load and redisplay times, and so on.
C++ code base
The code is written in C++, which provides a solid foundation on which to build Microsoft Rich Edit 3.0.
With a few exceptions, Microsoft Rich Edit 2.0 uses the same functions, structures, and messages as Microsoft Rich Edit 1.0. Note, however, the following differences:
The name of the Microsoft Rich Edit 1.0 window class is RichEdit. Microsoft Rich Edit 2.0 has both ANSI and Unicode window classes RichEdit20A and RichEdit20W, respectively. To specify the appropriate rich edit window class, use the RICHEDIT_CLASS constant, which the Richedit.h file defines depending on the definition of the UNICODE compile flag.
In Microsoft Rich Edit 2.0, if you create a Unicode rich edit control (one that expects Unicode text messages), you must specify only Unicode data in any window messages sent to the control. Similarly, if you create an ANSI rich edit control, send only ANSI or double-byte character set (DBCS) data. You can use the IsWindowUnicode function to determine whether a rich edit control uses Unicode text messages. Note that the rich edit COM interfaces use Unicode text unless they encounter a code page argument.
Microsoft Rich Edit 1.0 used CR/LF character combinations for paragraph markers. Microsoft Rich Edit 2.0 used only a carriage return character ('\r'). Microsoft Rich Edit 3.0 uses only a carriage return character but can emulate Microsoft Rich Edit 1.0 in this regard.
Microsoft Rich Edit 2.0 introduced the following new messages.
The following messages are supported only in Asian-language versions of Microsoft Rich Edit 1.0. They are not supported in any later versions of Rich Edit.
Microsoft Rich Edit 3.0 is a single, scalable, world-wide DLL that offers high performance and compatibility with Word in a small package. New features for Microsoft Rich Edit 3.0 include richer text, zoom, font binding, more powerful IME support, and rich complex script support (bidirectional, Indic, and Thai).
Microsoft Rich Edit 3.0 includes the following features in addition to the features provided by Rich Edit Version 2.0.
Feature
Description
Zoom
The zoom factor is given by a ratio.
Paragraph numbering (single-level)
Numeric, upper and lower alphabetic, or Roman numeral.
Simple tables
Deleting and inserting rows is possible, but not resizing nor wrapping inside cells. With advanced typography turned on (see EM_GETTYPOGRAPHYOPTIONS), Microsoft Rich Edit 3.0 can align columns centered or flush right, and include decimals. Cells are simulated by tabs, so text tabs and carriage returns are replaced by blanks.
Dashed, dash-dot, dash-dot-dot, and dot underlining has been added.
Underline coloring
Underlined text can be tagged with one of 15 document choices for underline colors.
Hidden text
Marked by CHARFORMAT2 attribute. Handy for roundtripping (writing out to a file what was read in) of information that ordinarily should not be displayed.
More default hot keys
These hot keys function the same as those in Word. For example, European accent dead keys (U.S. keyboards only). Number hot key (CTRL+L) cycles through numbering options available, starting with bullet.
HexToUnicode IME
Allows a user to convert between hexadecimal and Unicode by using hot keys.
Smart quotes
This feature is toggled on and off by CTRL+ALT+' for U.S. keyboards.
Soft hyphens
For plain text, use 0xAD. For RTF, use -.
Italics cursor
In addition, the mouse cursor changes to a hand when over URLs.
Advanced typography option
Microsoft Rich Edit 3.0 can use an advanced typography option for line breaking and display (see EM_GETTYPOGRAPHYOPTIONS). This elegant option was added primarily to facilitate handling complex scripts (bidirectional, Indic, and Thai). In addition, a number of improvements occur for simple scripts. Examples are:
Center, right, decimal tabs
Fully justified text
Underline averaging, which provides a uniform underline even when adjacent text runs have different font sizes.
Complex script support
Microsoft Rich Edit 3.0 supports bidirectional (text with Arabic and/or Hebrew mixed with other scripts), Indic (Indian scripts like Devangari), and Thai text. For support of these complex scripts, the advanced typography and Uniscribe components are used.
Font binding
Microsoft Rich Edit 3.0 will automatically choose an appropriate font for characters that clearly do not belong to the current character set stamp. This is done by assigning character sets to text runs and associating fonts with those character sets. For more information, see Font Binding.
Plain-text read/write options specific to character sets
This allows reading a file using one character set, and writing with a different character set.
UTF-8 RTF
This is recommended for cutting, copying, and pasting operations. This file format is more compact than ordinary RTF, faster, and compatible with Unicode.
Microsoft Office 9 IME support (IME98)
This more powerful IME capability has been separated into an independent module. Features include:
Reconversion In the earlier versions, the user needed to delete the final string first and then type in a new string to get to the correct candidate. This new feature enables the user to convert the final string back to composition mode, thereby allowing easy selection of a different candidate string.
Document feed This feature provides IME98 with the text for the current paragraph, which helps IME98 perform more accurate conversion during typing.
Mouse operation This feature provides better control over the candidate and UI windows during typing.
Caret position This feature provides the current caret and line information, which IME98 uses to position UI windows (for example, a candidate list).
Active Input Method Manager (IMM) support
Users can invoke the Active IMM object, which enables users to enter Asian characters on U.S. systems.
HexToUnicode support
Users can convert between hexadecimal notation and Unicode by using hot keys.
More RTF roundtripping
RTF text that is read in from a file will be written back out intact.
Improved 1.0 compatibility mode
Microsoft Rich Edit 3.0 can emulate Microsoft Rich Edit 1.0 behavior. For example, it is possible to change between MBCS and Unicode character-position (cp) mappings.
Increased freeze control
The display can be frozen over multiple API calls and then unfrozen to display the updates.
Increased undo control
Undo can be suspended and resumed (an IME requirement).
Increase/decrease font size
Increases or decreases font size to one of six standard values (12, 28, 36, 48, 72, and 80 points).
Rich Edit Version 4.1
The window class for Microsoft Rich Edit 4.1 is MSFTEDIT_CLASS. New features for Microsoft Rich Edit 4.1 include hyphenation, page rotation, and Text Services Framework (TSF) support.
Microsoft Rich Edit 4.1 includes the following features in addition to the features provided by Rich Edit Version 3.0.
To turn on TSF and certain TSF features, use the following styles in EM_SETEDITSTYLE: SES_USECTF, SES_CTFALLOWEMBED, SES_CTFALLOWPROOFING, and SES_CTFALLOWSMARTTAG.
New flags allow the client to set the default font and font sizes for a given LCID or character set, to set the default font for the control, to prevent keyboard switching to match the font, and more.
To send or post Unicode characters to ANSI windows, use WM_UNICHAR. It is equivalent to WM_CHAR, but it uses (UTF)-32.
Unsupported Edit Control Functionality
Rich edit controls support most but not all functionality for multiline edit controls. This section lists the edit control messages and window styles that are not supported by rich edit controls.
The following messages are processed by edit controls but not by rich edit controls.
Rich edit controls support the following shortcut keys.
Keys
Operations
Comments
Shift+Backspace
Generate a LRM/LRM on a bidi keyboard
BiDi specific
Ctrl+Tab
Tab
Ctrl+Clear
Select all
Ctrl+Number Pad 5
Select all
Ctrl+A
Select all
Ctrl+E
Center alignment
Ctrl+J
Justify alignment
Ctrl+R
Right alignment
Ctrl+L
Left alignment
Ctrl+C
Copy
Ctrl+V
Paste
Ctrl+X
Cut
Ctrl+Z
Undo
Ctrl+Y
Redo
Ctrl+'+' (Ctrl+Shift+'=')
Superscript
Ctrl+'='
Subscript
Ctrl+1
Line spacing = 1 line.
Ctrl+2
Line spacing = 2 lines.
Ctrl+5
Line spacing = 1.5 lines.
Ctrl+' (apostrophe)
Accent acute
After pressing the short cut key, press the appropriate letter (for example a, e, or u). This applies to English, French, German, Italian, and Spanish keyboards only.
Ctrl+` (grave)
Accent grave
See Ctrl+' comments.
Ctrl+~ (tilde)
Accent tilde
See Ctrl+' comments.
Ctrl+; (semicolon)
Accent umlaut
See Ctrl+' comments.
Ctrl+Shift+6
Accent caret (circumflex)
See Ctrl+' comments.
Ctrl+, (comma)
Accent cedilla
See Ctrl+' comments.
Ctrl+Shift+' (apostrophe)
Activate smart quotes
Backspace
If text is protected, beep and do not delete it. Otherwise, delete previous character.
Ctrl+Backspace
Delete previous word. This generates a VK_F16 code.
F16
Same as Backspace.
Ctrl+Insert
Copy
Shift+Insert
Paste
Insert
Overwrite
DBCS does not overwrite.
Ctrl+Left Arrow
Move cursor one word to the left.
On bidi keyboard, this depends on the direction of the text.
Ctrl+Right Arrow
Move cursor one word to the right.
See Ctrl+Left Arrow comments.
Ctrl+Left Shift
Left alignment
In BiDi documents, this is for left-to-right reading order.
Ctrl+Right Shift
Right alignment
In BiDi documents, this is for right-to-left reading order.
Ctrl+Up Arrow
Move to the line above.
Ctrl+Down Arrow
Move to the line below.
Ctrl+Home
Move to the beginning of the document.
Ctrl+End
Move to the end of the document.
Ctrl+Page Up
Move one page up.
If in SystemEditMode and Single Line control, do nothing.
Ctrl+Page Down
Move one page down.
See Ctrl+Page Up comments.
Ctrl+Delete
Delete the next word or selected characters.
Shift+Delete
Cut the selected characters.
Esc
Stop drag-drop.
While doing a drag-drop of text.
Alt+Esc
Change the active application.
Alt+X
Converts the Unicode hexadecimal value preceding the insertion point to the corresponding Unicode character.
Alt+Shift+X
Converts the Unicode character preceding the insertion point to the corresponding Unicode hexadecimal value.
Alt+0xxx (Number Pad)
Inserts Unicode values if xxx is greater than 255. When xxx is less than 256, ASCI range text is inserted based on the current keyboard.
Must enter decimal values.
Alt+Shift+Ctrl+F12
Hex to Unicode.
In case Alt+X is already taken for another use.
Alt+Shift+Ctrl+F11
Selected text will be output to the debugger window and saved to %temp%\DumpFontInfo.txt.
For Debug only (need to set Flag=8 in Win.ini)
Ctrl+Shift+A
Set all caps.
Ctrl+Shift+L
Fiddle bullet style.
Ctrl+Shift+Right Arrow
Increase font size.
Font size changes by 1 point in the range 4pt-11pt; by 2points for 12pt-28pt; it changes from 28pt -> 36pt -> 48pt -> 72pt -> 80pt; it changes by 10 points in the range 80pt - 1630pt; the maximum value is 1638.