您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > RichEdit控件SDK参考手册
RichEdit控件SDK参考手册-1默认分类2008-12-1701:01:23阅读50评论0字号:大中小摘要:本文对RichEdit控件底层消息机制进行了讲解,以期读者对Windows平台下的RichEdit控件有一个更深入的认识,同时对于使用Win32SDK进行开发的人员具有一定参考价值。因为文章的初衷是引领VB程序员通过Win32API调用来扩展VB下的RichEdit控件的功能,所以对于每个消息的详细说明和注意事项未作过多说明,感兴趣的朋友可以参考VisualStudio下的MSDNLibrary。关键字:RichEditControl、RTF、SDK、MSDN。一、引言RichEdit控件是一个可用于输入、编辑、格式化、打印和保存文本的窗体。这些文本可以设置字符和段落格式,并且可以包含嵌入的COM对象。RichEdit控件提供格式化文本的编程接口。不过,应用程序必须实现这些用户接口组件,以便用户可以进行格式化操作。RichEdit控件几乎支持所有用于多行Edit控件的消息和通知。因此,已经使用了Edit控件的程序可以很容易的改为RichEdit控件。额外的消息和通知使得应用程序可以访问RichEdit控件特有的功能。获取更多关于Edit控件的信息,请参阅EditControls。正如大家所熟知的,Windows控件是基础窗口,它处理那些控制窗口显示和特征的消息。而ActiveX控件是把那些消息变成属性和方法的COM容器。RichEditWindows控件是EditWindows控件的扩展集,TextBoxActiveX控件也是从它派生而来。RichEdit能够识别Edit消息并且加入了自己特有的消息。你可以在Win32帮助文件中认出Edit和RichEdit的消息常数,因为他们均采用EM_作为前缀。ActiveXRichTextBox控件将绝大多数的这种消息映射为其属性。例如,EM_LIMITTEXT与MaxLength属性相对应。但是你同时会注意到一些感兴趣的消息并没有与之对应的RichTextBox属性。为什么呢?ActiveX控件为最通用的特性提供方法和属性,更具体讲,是提供给VB设计者最感兴趣的特性。设计者们似乎喜欢每个新版本里更多的特征。例如,TextBox和RichTextBox控件现在具备Locked属性。在旧版本的VB中你不得不通过EM_SETREADONLY消息来模拟。但是,还有许多其他隐藏的或者不是很明显的特性在ActiveX控件中尚未提供。为了使用这些特性,我们就必须对RichEdit控件的底层消息机制进行较深入的了解。二、关于RichEdit控件RichEdit控件的最初规范为1.0版。目前规范为2.0版。(译者注:目前最新版本为4.1版本!)在创建一个RichEdit控件之前,你应该调用LoadLibrary函数来确认安装的RichEdit控件的版本。下表显示了不同版本与其DLL间的对应关系。RichEdit版本DLL名称版本号1.0RICHED32.DLL2.0RICHED20.DLL低于5.30.23.12003.0RICHED20.DLL5.30.23.1200或更高4.1Msftedit.dll下表给出了不同版本Windows下与其包含的不同版本的RichEdit对应关系:WindowsXPSP1包含RichEdit4.1,RichEdit3.0,和一个RichEdit1.0仿真程序。WindowsXP包含RichEdit3.0和一个RichEdit1.0仿真程序。WindowsMe包含RichEdit1.0和3.0。Windows2000包含RichEdit3.0和一个RichEdit1.0仿真程序。WindowsNT4.0包含RichEdit1.0和2.0。Windows98包含RichEdit1.0和2.0。Windows95只包含RichEdit1.0。不过,Riched20.DLL与Windows95系统兼容,所以可以在正确安装后使用。2.1RichEdit2.0RichEdit2.0包含几个新特性,比如支持Unicode和远东语言,多级撤消,以及大量的增强用户接口。RichEdit2.0采用与RichEdit1.0一致的Win32函数,结构和消息,极少例外。他们的区别在于:RichEdit1.0窗体类的名字叫“RichEdit”。RichEdit2.0同时具有ANSI和Unicode窗体类,“RichEdit20A”和“RichEdit20W”分别表示对应的RichEdit窗体类,我们RichEdit.H文件定义的RICHEDIT_CLASS常数来区分,而具体采用哪一个取决于UNICODE编译标志。在RichEdit2.0中,如果你创建一个Unicode控件,只需在任何发往控件的Window消息中给出Unicode数据。同样的,如果创建了一个ANSI控件,只能发送ANSI或者DBCS数据。你可以使用IsWindowUnicode函数来判断是否一个RichEdit控件是Unicode的。RichEdit1.0采用CRLF(回车符和换行符)字符组合表示段落符号。而RichEdit2.0只采用一个回车符号(‘\r’)。RichEdit2.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动作的连续键入动作的组合。RichEdit2.0包含以下新的结构:消息描述CHARFORMAT2包含字符格式信息。PARAFORMAT2包含段落格式属性。RichEdit2.0不支持以下这些在亚洲语言版本的RichEdit1.0中支持的消息:EM_CONVPOSITIONEM_GETIMECOLOREM_GETIMEOPTIONSEM_GETPUNCTUATIONEM_GETWORDWRAPMODEEM_SETIMECOLOREM_SETIMEOPTIONSEM_SETPUNCTUATIONEM_SETWORDWRAPMODE2.2创建RichEdit控件可用通过CreateWindowEx函数中指定RichEdit窗体类来创建一个RichEdit控件。如果使用1.0版本(RICHED32.DLL),窗体类参数应该为“RichEdit”。如果采用2.0版本(RICHED20.DLL),窗体类参数应该为“RICHEDIT_CLASS”。RichEdit控件支持大部分的Edit控件采用的窗体样式,同时也支持一些额外的样式。你如果希望控件中的文本支持不止一行的话就应该给出ES_MULTILINE窗体样式。2.3文本格式应用程序可以通过给RichEdit控件发送消息来格式化字符和段落以及获取这些格式化信息。段落格式属性包含对齐、跳格、缩进和编号。对字符而言,你可以指定字体、尺寸、颜色以及如粗体、斜体和保护等效果。你可以采用EM_SETPARAFORMAT消息来应用段落格式。获取当前选中文本的段落格式属性,则采用EM_GETPARAFORMAT消息。PARAFORMAT结构将会在这两个消息中用到,它用于描述段落格式属性。你可以采用EM_SETCHARFORMAT消息来应用字符格式。获取当前选中文本的字符格式属性,则采用EM_GETCHARFORMAT消息。CHARFORMAT结构将会在这两个消息中用到,它用于描述字符格式属性。你也可以采用EM_SETCHARFORMAT和EM_GETCHARFORMAT消息来设置和获取默认字体格式,它将应用于所有随后插入的字符。例如,应用程序将默认字符格式设置为粗体,则用户随后敲入的字符都将为粗体。只有在当前选择内容为空的时候默认字符格式才会被应用到新插入的文本上。否则,新的文本将假定沿用其所替换的文本的格式。如果选择内容改变,则默认字体格式将将采用该内容的首字符的格式。保护(Protected)字符效果是唯一不改变其文本显示的例子。如果用户试图修改保护文本,RichEdit控件将发送EN_PROTECTED通知到其父窗口,让其父窗体决定是否允许或者拒绝修改。为了接收该通知,你必须使用EM_SETEVENTMASK消息来启用它。前景色是一个字符属性,但是背景色是一个RichText控件属性。要设置背景色,请采用EM_SETBKGNDCOLOR消息。2.4RichEdit控件中的当前选择内容用户可以在RichEdit控件中通过鼠标和键盘来选择文本。当前选择内容指的是选中字符的范围,或者表示没有字符选中时的插入点位置。应用程序可以获取选中内容的相关信息,设置当前选中内容,决定当前选中内容何时改变,显示或者隐藏当前高亮显示的选中内容等。确定RichEdit控件中的当前选中内容,采用EM_EXGETSEL消息。设置当前选择区域,采用EM_EXSETSEL消息。CHARRANGE结构用于在这两个消息中描述字符范围。获取当前选中内容的相关信息,你可以采用EM_SELECTIONTYPE消息。应用程序可以通过处理EN_SELCHANGE通知来检测当前选中内容何时被改变。该通知通过SELCHANGE结构给出新选中内容的相关信息。RichEdit控件只有在你通过EM_SETEVENTMASK消息开启它之后才会发送该通知。默认情况下,RichEdit控件在获取和失去焦点时将开启和隐藏选中文本的高亮显示。你可以通过EM_HIDESELECTION消息在任何时候开启或者隐藏选中区域的高亮显示。例如,某个应用程序可能提供一个查找对话框用于在RichEdit控件中查找文本,这种情况下就必须使用EM_HIDESELECTION消息来保持选中文本的高亮显示。与Edit控件一样,你可以使用ES_NOHIDESEL窗体样式来防止RichEdit控件在失去焦点时隐藏选中区域的高亮显示。你也可以在RichEdit控件创建之后使用EM_HIDESELECTION消息来改变窗体的ES_NOHIDESEL样式。获取和设置当前选中内容使用EM_GETSEL和EM_SETSELEdit控件消息,而非EM_EXGETSEL和EM_EXSETSEL消息。EM_GETSEL消息将两个16位字符索引压缩为它的32位返回值,因此,仅仅适用于选中区域的前64K字节。然而,一个RichEdit控件不可能包含超过32K字节的文本,除非你使用EM_EXLIMITTEXT消息扩展了这个限制。对于选中文本中超过前64K字节的文本,EM_GETSEL消息将返回-1。2.5RichEdit文本操作应用程序可以发送消息来获取或者查找RichEdit控件中的文本。你既可以获取选中区域的文本也可以获取给定范围的文本。获取RichEdit控件中的选中文本,使用EM_GETSELTEXT消息。文本将被拷贝到指定字符数组中。你必须确保数组大小足以容纳选中文本再加上一个终止NULL字符。获取给定范围的文本,使用EM_GETTEXTRANGE消息。该消息将使用TEXTRANGE结构,用于描述需要获得的文本范围以及用于获取该文本的字符数组指针。在这里,同样的,你必须确保数组大小足以容纳选中文本再加上一个终止NULL字符。你可以使用EM_FINDTEXT消息在一个RichEdit控件中查找字符串。该消息将使用结构,用于描述文本查找范围及需要查找
本文标题:RichEdit控件SDK参考手册
链接地址:https://www.777doc.com/doc-2848391 .html