MFC Library Reference Using CRichEditCtrl
(http://sobar.soso.com/tie/7576199.html)
rich edit控件是用户能够输入和编辑文本的窗口。文本能被指定字符和段落格式,并且也能包含嵌入式OLE对象。rich edit控件在MFC中通过CRichEditCtrl类描绘。
关于哪些你想知道更多?
RichEdit控件概述
如果你在对话框中使用rich
edit控件(不管你的程序是SDI,MDI,还是基本对话框),你必须在对话框显示之前调用AfxInitRichEdit一次。调用此函数的典型位置
在你的程序的InitInstance成员函数中。你不必每次显示对话框时调用它,仅仅第一次就可以了。如果你使用CRichEditView你不必调用
AfxInitRichEdit.
Rich
edit控件(CRichEditCtrl)为格式化文本提供程序接口。然而,一个程序必须实现任一用户接口组件,这个组件对于用户格式化操作可用是必要
的。那就是,Rich
edit控件支持选定文本的字符或段落属性的改变。字符属性的一些例子就是黑粗体,斜体,字体系列,和点大小。段落属性的例子如对齐,页边空白,和移字键
(英文原文:tab stops.表示在rich
edit中按下tab键光标会移动一段距离)。然而,这是给你提供的用户接口,不管那是一个工具条按钮,菜单项,或是一个格式化字符对话框。也有函数对目
前选择查询richedit控件。使用这些函数显示当前属性设置,比如,设置一个选定标记在用户接口上,如果当前选择是黑粗体字符格式属性。
参见CharacterFomatting和paragraph formatting查看更多字符段落格式化信息。
rich edit控件支持几乎所有多行编辑控件( multiline edit
controls)的操作和通知消息。因此,使用EDIT控件的应用程序很容易的变换为使用RICH
EDIT控件。附加的消息和通知(notifications)能使程序访问richedit的其它特性。参看CEdit查看编辑控件消息。
与rich edit控件有关的类 CRichEditView,
CRichEditDoc, 和 CRichEditCntrItem类提供在MFC的文档/视图结构环境内的RICH
EDIT控件的功能。CRichEditView保持着文本和文本的格式化特性。CRichEditDoc保持着视图中OLE客户项的序列。
CRichEditCntrItem提供对OLE客户项的container-side
访问。要修改CRichEditView内容,使用CRichEditView::GetRichEditCtrl
Rich Edit Control例子
一个MFC OLE例子,“写字板”,使用CRichEditView, CRichEditDoc, and CRichEditCntrItem 类。具体讲是它使用CRichEditCtrl.
Character Formatting in Rich Edit Controls
你能使用CRichEditCtrl成员函数来格式化字符和检索格式化信息。对于字符,你能指定字体,尺寸,颜色,和效果比如黑粗体,斜体,以及受保护的(protected)。
通过使用 SetSelectionCharFormat and SetWordCharFormat
成员函数你能应用字符格式化。为确定当前所选文本字符格式化,使用GetSelectionCharFormat 成员函数。 CHARFORMAT
结构用于指定字符属性的成员函数。CHARFORMAT中一个重要的成员是dwMask。在SetSelectionCharFormat和
SetWordCharFormat中,通过函数调dwMask指定哪种字符属性将被设置。GetSelectionCharFormat记述选定内容中
第一个字符的属性;dwMask指定整个选定内容中属性是一致的。
你也能取得和设置“默认字符格式化”(这种格式化也应用到后来所插入的字符中)。比如你的程序设置默认默认字符格式化为粗体,然后用户输入一个字符,这个
字符是粗体字。取得和设置默认字符属性,使用 GetDefaultCharFormat and SetDefaultCharFormat。
“受保护”(protected)字体属性不改变文本外观。假如用户尝试修改受保护文本,rich edit
control将会向父窗口发送一个EN_PROTECTED通知消息,这个消息通知父窗口来允许或阻止这个改变。为接收这个通知消息,你必须启用它通过
SetEventMask成员函数。For more information about the event mask, see
Notifications from a Rich Edit Control,
前景颜色是一个字符属性,但背景颜色是rich edit control 属性。要设置背景颜色,使用 SetBackgroundColor。
Paragraph Formatting in Rich Edit Controls
你能使用CRichEditCtrl来格式化段落和检索格式化信息。段落格式化属性包括对齐,tab stops(上有说明),缩进,和编号。
你能通过SetParaFormat来应用段落格式化。为确定当前所选文本的段落格式编排,使用GetParaFormat成员函数。
PARAFORMAT结构为这些指定段落属性的成员函数所使用。PARAFORMAT中一个重要的成员是dwMask.在SetParaFormat
中,dwMask指定在函数调用中哪个段落属性将被设置。GetParaFormat记述选定内容中第一个段落的属性;dwMask指定选定内容中属性是
一致的。
Current Selection in a Rich Edit Control
用户通过鼠标或键盘能够选择rich
edit控件中的文本。当前选择就是所选择的字符这个域,或是没有字符被选择时插入点的位置。应用程序能取得当前选定内容的信息,设置当前选定内容,确定
什么时候当前选定内容发生改变,以及显示或隐藏选定内容的突出显示(highlight:比如像鼠标选中几个字符时那种反相显示,下同)。
为确定rich edit
控件中当前选定的内容,使用GetSel成员函数。为设置当前选定内容,使用SetSel成员函数。CHARRANGE结构在指定字符范围(就是你选定哪
些字符这个范围内)函数中使用。为检索当前选定内容的信息,你能使用GetSelectionType成员函数。
默认情况下,rich
edit控件显示和隐藏选定内容的突出显示(highlight)当它取得和失去焦点时。任何时候通过使用HideSelection成员函数你能显示和
隐藏选定内容的highlight。例如,应用程序可能提供一个搜索对话框来在rich
edit控件中寻找文本。这个应用程序可能选择配匹的文本而没有关掉对话框,这种情况下它必须使用HideSelection来突出显示选定内容。
要取得rich edit控件中的选定文本,使用GetSelText成员函数。文本被复制到指定的字符数组中。你必须确保数组足够大以容纳选定的文本加上NULL终止符。
你能通过FindText成员函数来搜寻rich edit控件中的一个字符串。FINDTEXTEX结构在那些指定文本搜寻范围和要搜索的字符串的函数中使用。你也能指定例如这种选项——搜索是否区分大小写。
Word Breaks in Rich Edit Controls
rich edit控件调用函数称为"word break
procedure“来寻找字与字间的间隔和确定哪儿能断开行(lines)。当执行自动换行(word-wrap)操作时和当处理CTRL+LEFT和
CTRL+RIGHT 键组合控件可以使用这个信息。应用程序能发送这个消息到rich edit控件来取代默认的word-break
procedure,检索word-break信息,和确定给定字符落到哪一行上。
Clipboard Operations in Rich Edit Controls
你的程序使用最佳的剪贴板格式或指定的剪贴板格式来把剪贴板上的内容粘贴到richedit控件上。你也能确定richedit控件是否能粘贴剪贴板格式。
通过使用Copy和Cut成员函数你能复制和剪切当前选定的内容。类似的,通过使用Paste成员函数你也能将剪贴板上的内容粘贴到richedit控件上。控件粘贴第一个它所识别的可用的格式,这种格式可能是描述得最好的格式。
要粘贴指定的剪贴板格式,使用PasteSpecial成员函数。这个函数对于粘贴指定命令的程序是很用的,它能使用户选择剪贴板格式。你能使用CanPaste成员函数来确定所给的格式是不是控件所能辨识的。
你也能使用CanPaste来确定任一可用的剪贴板格式能否被rich edit控件所辨识。这个函数在OnInitMenuPopup操作是有用的。应用程序可能使它的粘贴命令可用或变灰,这个依赖于控件是否能粘贴任何可用格式。
rich edit控件注册了两种剪贴板格式:rich-text格式和一种称为RichEdit Text and Objects.应用程序通过RegisterClipboardFormat函数(指定CF_RTF和CF_RETEXTOBJ值)注册这些格式。
Stream Operations in Rich Edit Controls
你能使用流(streams)来传送数据进入rich edit控件或从其中输出。流由EDITSTREAM结构来定义,这个结构指定了一个缓冲区和一个应用程序定义的回调函数。
要读取数据到rich edit控件中(也就是,数据进入流(stream the data in)),使用StreamIn成员函数。控件重复调用应用程序定义的回调函数,这个函数每次传送一部分数据到缓冲区中去。
要保存rich edit控件内容(那就是,数据输出流(stream the data out)),使用StreamOut成员函数。控件重复写缓冲区,然后调用应用程序定义回调函数。每次调用时,回调函数保存缓冲区的内容。
注:缓冲区 buffer
Printing in Rich Edit Controls
你能告诉rich edit 控件为一个指定的设备提供输出,例如打印机。You can also specify the output device for which a rich edit control formats its text.
要为指定设备格式化rich edit控件内的部分内容,使用FormatRange成员函数。The FORMATRANGE structure
used with this function specifies the range of text to format as well
as the device context (DC) for the target device.
在为输出设备格式化文本后,使用DisplayBand成员函数你能发送输出到设备。通过重复使用FormatRange和DisplayBand,打印
rich edit控件的程序能实现banding (Banding is division of output into smaller
parts for printing purposes.)
使用SetTargetDevice成员函数指定目标设备对于rich edit控件格式化它的文本。这个函数对WYSIWYG(所见即所得)格式化是有用的,在这个格式化中程序决定文本的位置使用默认打印机字体以替代显示器的。
Bottomless Rich Edit Controls
你的程序能调整rich edit 控件的大小作为必须的以致于它总是与他的内容尺寸相同。通过向他的父窗口发送EN_REQUESTRESIZE通知消息,rich edit控件支持这种所谓的"bottomless"函数功能性,无论什么时候他的内容尺寸发生改变.
当处理EN_REQUESTRESIZE通知消息时,程序应该调整控件为REQRESIZE结构里的大小。程序可能也传送控件附近的信息来调节控件垂直方向上的改变。为调整控件大小,你可以使用CWnd函数SetWindowPos.
你能使bottomless rich edit控件发送EN_REQUESTRESIZE通知消息通过使用RequsetResize成员函数。这个消息在OnSize操作中是很有用的。
为接收EN_REQUSETRESIZE通知消息,你必须启用通知通过使用SetEventMask成员函数。
Notifications from a Rich Edit Control
通知消息记述影响rich edit控件的事件。他们能被父窗口或使用消息反射,或被rich edit控件自身处理。rich
edit控件支持所有的被eidt控件以及数个额外的使用的通知消息。你能确定rich edit通过设置"event
mask"将向他的父窗口发送哪个通知消息。
要为rich edit控件设置event mask,使用SetEventMask成员函数。你能通过使用GetEventMask成员函数为rich edit控件检索当前的event mask。
EN_MSGFILTER
处理EN_MSGFILTER通知使类,rich edit控件或父窗口筛选控件上的键盘和鼠标输入。这个操作能阻止键盘或鼠标消息被处理或通过修改指定的MSGFILTER结构来改变消息。
EN_PROTECTED
处理EN_PROTECTED通知消息来检测用户是什么时候尝试修改受保护文本。要标记受保护文本的范围,你可以设置protected character effect。参看Character Formatting in Rich Edit Controls.
EN_DROPFILES
通过处理EN_DROPFILES通知消息,你能使用户能够在rich edit控件中拖放文件。指定的ENDROPFILES结构饮食被拖放文件的信息。
EN_SELCHANGE
程序能检测当前选定内容什么时候通过EN_SELCHANGE通知消息发生改变。通知消息指定包含新的选定内容信息的SELCHANGE结构。
|