没有合适的资源?快使用搜索试试~ 我知道了~
RichTextBox SDK 参考手册.doc
需积分: 15 9 下载量 94 浏览量
2009-09-19
17:21:27
上传
评论
收藏 293KB DOC 举报
温馨提示
试读
21页
本文对Rich Edit控件底层消息机制进行了讲解,以期读者对Windows平台下的Rich Edit控件有一个更深入的认识,同时对于使用Win32 SDK进行开发的人员具有一定参考价值。因为文章的初衷是引领VB程序员通过Win32 API调用来扩展VB下的Rich Edit控件的功能,所以对于每个消息的详细说明和注意事项未作过多说明,感兴趣的朋友可以参考Visual Studio下的MSDN Library。
资源推荐
资源详情
资源评论
RICH EDIT 控件 SDK 参考手册
摘要: 本文对 Rich Edit 控件底层消息机制进行了讲解,以期读者对 Windows 平台下的 Rich Edit 控件
有一个更深入的认识,同时对于使用 Win32 SDK 进行开发的人员具有一定参考价值。因为文章的初衷是
引领 VB 程序员通过 Win32 API 调用来扩展 VB 下的 Rich Edit 控件的功能,所以对于每个消息的详细说
明和注意事项未作过多说明,感兴趣的朋友可以参考 Visual Studio 下的 MSDN Library。
关键字:Rich Edit Control、RTF、SDK、MSDN。
一、引言
Rich Edit 控件是一个可用于输入、编辑、格式化、打印和保存文本的窗体。这些文本可以设置字符
和段落格式,并且可以包含嵌入的 COM 对象。Rich Edit 控件提供格式化文本的编程接口。不过,应用
程序必须实现这些用户接口组件,以便用户可以进行格式化操作。
%Rich Edit 控件几乎支持所有用于多行 Edit 控件的消息和通知。因此,已经使用了 Edit 控件的程序
可以很容易的改为 Rich Edit 控件。额外的消息和通知使得应用程序可以访问 Rich Edit 控件特有的功能。
获取更多关于 Edit 控件的信息,请参阅 Edit Controls。
正如大家所熟知的, Windows 控件是基础窗口,它处理那些控制窗口显示和特征的消息。而
ActiveX 控件是把那些消息变成属性和方法的 COM 容器。RichEdit Windows 控件是 Edit Windows 控
件的扩展集,TextBox ActiveX 控件也是从它派生而来。RichEdit 能够识别 Edit 消息并且加入了自己特
有的消息。你可以在 Win32 帮助文件中认出 Edit 和 RichEdit 的消息常数,因为他们均采用 EM_作为前
缀。
ActiveX RichTextBox 控 件将 绝 大 多数 的这 种 消 息映 射为 其 属性。 例如 , EM_LIMITTEXT 与
MaxLength 属性相对应。但是你同时会注意到一些感兴趣的消息并没有与之对应的 RichTextBox 属性。
为什么呢?
ActiveX 控件为最通用的特性提供方法和属性,更具体讲,是提供给 VB 设计者最感兴趣的特性。设
计者们似乎喜欢每个新版本里更多的特征。 例如,TextBox 和 RichTextBox 控件现在具备 Locked 属
性。在旧版本的 VB 中你不得不通过 EM_SETREADONLY 消息来模拟。但是,还有许多其他隐藏的或者
不是很明显的特性在 ActiveX 控件中尚未提供。为了使用这些特性,我们就必须对 Rich Edit 控件的底层
消息机制进行较深入的了解。
二、关于 Rich Edit 控件
Rich Edit 控件的最初规范为 1.0 版。目前规范为 2.0 版。(译者注:目前最新版本为 4.1 版本!)
在创建一个 Rich Edit 控件之前,你应该调用 LoadLibrary
函数来确认安装的 Rich Edit 控件的版本。
下表显示了不同版本与其 DLL 间的对应关系。
Rich Edit 版本 DLL 名称 版本号
1.0 RICHED32.DLL
2.0 RICHED20.DLL 低于 5.30.23.1200
3.0 RICHED20.DLL
5.30.23.1200 或更高
4.1 Msftedit.dll
下表给出了不同版本 Windows 下与其包含的不同版本的 Rich Edit 对应关系:
Windows XP SP1
包含 Rich Edit 4.1, Rich Edit 3.0, 和一个 Rich Edit 1.0 仿真程序。
Windows XP
包含 Rich Edit 3.0 和一个 Rich Edit 1.0 仿真程序。
Windows Me
包含 Rich Edit 1.0 和 3.0。
Windows 2000
包含 Rich Edit 3.0 和一个 Rich Edit 1.0 仿真程序。
Windows NT 4.0
包含 Rich Edit 1.0 和 2.0。
Windows 98
包含 Rich Edit 1.0 和 2.0。
Windows 95
只包含 Rich Edit 1.0。不过,Riched20.DLL 与 Windows 95 系统兼容,所
以可以在正确安装后使用。
2.1 Rich Edit 2.0
Rich Edit 2.0 包含几个新特性,比如支持 Unicode 和远东语言,多级撤消,以及大量的增强用户接
口。
Rich Edit 2.0 采用与 Rich Edit 1.0 一致的 Win32 函数,结构和消息,极少例外。他们的区别在于:
Rich Edit 1.0 窗体类的名字叫“RichEdit”。Rich Edit 2.0 同时具有 ANSI 和 Unicode 窗体类,
“RichEdit20A”和“RichEdit20W”分别表示对应的 Rich Edit 窗体类,我们 RichEdit.H 文件定
义的 RICHEDIT_CLASS 常数来区分,而具体采用哪一个取决于 UNICODE 编译标志。
在 Rich Edit 2.0 中,如果你创建一个 Unicode 控件,只需在任何发往控件的 Window 消息中
给出 Unicode 数据。同样的,如果创建了一个 ANSI 控件,只能发送 ANSI 或者 DBCS 数据。
你可以使用 IsWindowUnicode 函数来判断是否一个 Rich Edit 控件是 Unicode 的。
Rich Edit 1.0 采用 CRLF(回车符和换行符)字符组合表示段落符号。而 RichEdit 2.0 只采用一
个回车符号(‘\r’)。
Rich Edit 2.0 包含以下新的消息:
消息 描述
EM_AUTOURLDETECT
是否开启/关闭自动 URL 检测。
EM_CANREDO
判断是否在 Redo 队列中有一些动作。
EM_GETIMECOMPMODE
获取当前输入方式编辑(IME)模式。
EM_GETLANGOPTIONS
获取 IME 和远东语言支持选项。
EM_GETREDONAME
获取 Redo 队列中的下一动作的类型名称。
EM_GETTEXTMODE
获取文本模式或者 Undo 级别。
EM_GETUNDONAME
获取 Undo 队列中的下一动作的类型名称。
EM_REDO
重做 Redo 队列中的下一动作。
EM_SETLANGOPTIONS
设置 IME 和远东语言支持选项。
EM_SETTEXTMODE
设置文本模式或者 Undo 级别。
EM_SETUNDOLIMIT
设置 Undo 队列的最大动作数目。
EM_STOPGROUPTYPING
终止当前 Undo 动作的连续键入动作的组合。
Rich Edit 2.0 包含以下新的结构:
消息 描述
CHARFORMAT2
包含字符格式信息。
PARAFORMAT2
包含段落格式属性。
Rich Edit 2.0 不支持以下这些在亚洲语言版本的 Rich Edit 1.0 中支持的消息:
EM_CONVPOSITION
EM_GETIMECOLOR
EM_GETIMEOPTIONS
EM_GETPUNCTUATION
EM_GETWORDWRAPMODE
EM_SETIMECOLOR
EM_SETIMEOPTIONS
EM_SETPUNCTUATION
EM_SETWORDWRAPMODE
2.2 &创建 Rich Edit 控件
可用通过 CreateWindowEx 函数中指定 Rich Edit 窗体类来创建一个 Rich Edit 控件。如果使用
1.0 版本(RICHED32.DLL),窗体类参数应该为“RichEdit”。如果采用 2.0 版本(RICHED20.DLL),窗体
类参数应该为“RICHEDIT_CLASS”。
Rich Edit 控件支持大部分的 Edit 控件采用的窗体样式,同时也支持一些额外的样式。你如果希望控
件中的文本支持不止一行的话就应该给出 ES_MULTILINE 窗体样式。
2.3 文本格式
应用程序可以通过给 Rich Edit 控件发送消息来格式化字符和段落以及获取这些格式化信息。段落格
式属性包含对齐、跳格、缩进和编号。对字符而言,你可以指定字体、尺寸、颜色以及如粗体、斜体和保
护等效果。
你可以采用 EM_SETPARAFORMAT 消息来应用段落格式。获取当前选中文本的段落格式属性,则
采用 EM_GETPARAFORMAT 消息。PARAFORMAT 结构将会在这两个消息中用到,它用于描述段落格
式属性。
你可以采用 EM_SETCHARFORMAT 消息来应用字符格式。获取当前选中文本的字符格式属性,则
采用 EM_GETCHARFORMAT 消息。CHARFORMAT 结构将会在这两个消息中用到,它用于描述字符格
式属性。
你也可以采用 EM_SETCHARFORMAT 和 EM_GETCHARFORMAT 消息来设置和获取默认字体格式,
它将应用于所有随后插入的字符。例如,应用程序将默认字符格式设置为粗体,则用户随后敲入的字符都
将为粗体。
只有在当前选择内容为空的时候默认字符格式才会被应用到新插入的文本上。否则,新的文本将假定
沿用其所替换的文本的格式。如果选择内容改变,则默认字体格式将将采用该内容的首字符的格式。
保护(Protected)字符效果是唯一不改变其文本显示的例子。如果用户试图修改保护文本, Rich Edit
控件将发送 EN_PROTECTED 通知到其父窗口,让其父窗体决定是否允许或者拒绝修改。为了接收该通
知,你必须使用 EM_SETEVENTMASK 消息来启用它。
前 景 色 是 一 个 字 符 属 性 , 但是 背 景 色 是 一 个 Rich Text 控 件 属性 。 要设 置 背 景 色 , 请 采 用
EM_SETBKGNDCOLOR 消息。
&2.4 Rich Edit 控件中的当前选择内容
用户可以在 Rich Edit 控件中通过鼠标和键盘来选择文本。当前选择内容指的是选中字符的范围,或
者表示没有字符选中时的插入点位置。应用程序可以获取选中内容的相关信息,设置当前选中内容,决定
当前选中内容何时改变,显示或者隐藏当前高亮显示的选中内容等。
确定 Rich Edit 控件中的当前选中内容,采用 EM_EXGETSEL 消息。设置当前选择区域,采用
EM_EXSETSEL 消息。CHARRANGE 结构用于在这两个消息中描述字符范围。获取当前选中内容的相
关信息,你可以采用 EM_SELECTIONTYPE 消息。
应用 程序可 以通 过处 理 EN_SELCHANGE 通知 来检 测当 前选中 内容 何时被 改变 。该 通知通过
SELCHANGE 结构给出新选中内容的相关信息。Rich Edit 控件只有在你通过 EM_SETEVENTMASK 消
息开启它之后才会发送该通知。
默认情况下,Rich Edit 控件在获取和失去焦点时将开启和隐藏选中文本的高亮显示。你可以通过
EM_HIDESELECTION 消息在任何时候开启或者隐藏选中区域的高亮显示。例如,某个应用程序可能提
供一个查找对话框用于在 Rich Edit 控件中查找文本,这种情况下就必须使用 EM_HIDESELECTION 消
息来保持选中文本的高亮显示。
与 Edit 控件一样,你可以使用 ES_NOHIDESEL 窗体样式来防止 Rich Edit 控件在失去焦点时隐藏选
中区域的高亮显示。你也可以在 Rich Edit 控件创建之后使用 EM_HIDESELECTION 消息来改变窗体的
ES_NOHIDESEL 样式。
%获取和设置当前选中内容使用 EM_GETSEL 和 EM_SETSEL Edit 控件消息,而非 EM_EXGETSEL
和 EM_EXSETSEL 消息。EM_GETSEL 消息将两个 16 位字符索引压缩为它的 32 位返回值,因此,仅仅
适用于选中区域的前 64K 字节。然而,一个 Rich Edit 控件不可能包含超过 32K 字节的文本,除非你使
用 EM_EXLIMITTEXT 消息扩展了这个限制。对于选中文本中超过前 64K 字节的文本,EM_GETSEL 消
息将返回-1。
2.5 Rich Edit 文本操作
应用程序可以发送消息来获取或者查找 Rich Edit 控件中的文本。你既可以获取选中区域的文本也可
以获取给定范围的文本。
获取 Rich Edit 控件中的选中文本,使用 EM_GETSELTEXT 消息。文本将被拷贝到指定字符数组中。
你必须确保数组大小足以容纳选中文本再加上一个终止 NULL 字符。
获取给定范围的文本,使用 EM_GETTEXTRANGE 消息。该消息将使用 TEXTRANGE 结构,用于
描述需要获得的文本范围以及用于获取该文本的字符数组指针。在这里,同样的,你必须确保数组大小足
以容纳选中文本再加上一个终止 NULL 字符。
%你可以使用 EM_FINDTEXT 消息在一个 Rich Edit 控件中查找字符串。该消息将使用结构,用于描
述文本查找范围及需要查找的字符串。你也可以指定诸如是否区分大小写等搜索选项。
2.6 断字与断行
Rich Edit 控件调用叫做“断字处理过程”的函数来查找单词间分隔符以及判断何处可以换行。控件在
执行自动换行操作时以及处理 Ctrl+左箭头和 Ctrl+右箭头的组合键时将利用这些信息。应用程序可以通
过向 Rich Edit 控件发送消息来替换默认的“断字处理过程”,获取断字信息,以及判断一个给定字符属于
哪一行。
Rich Edit 控件的断字处理过程与 Edit 控件相似,但是它拥有更多能力。两种控件的断字处理过程均
可以识别一个字符是否是一个分隔符,并且能够在找到给定位置的前一个或者后一个字分隔符。分隔符指
的是一个标志单词结束的字符,比如空格。在 Edit 控件中,断字只出现在分隔符之后。
Rich Edit 控件的断字处理过程同时将字符组合为字符类,由到 0x00 的 0x0F 值来标识。断字可以
出现在分隔符之后或者在不同类的字符之间。因此,在字符串“WIN.COM”中,由于字母数字和标点属于
不同类别,断字程序将找到两个字分隔符。
剩余20页未读,继续阅读
资源评论
lzlnf5
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功