Theory
Searching for Text
RichEdit 控件具有几种正文操作,搜索指定正文就是其中的一种。 搜索正文是通过发送 EM_FINDTEXT 或者 EM_FINDTEXTEX 消息来完成的。 这两个消息有一点很小的不同点。
EM_FINDTEXTwParam == 搜索选项。 可以是下表中的任意组合值。 这些选项对 EM_FINDTEXT 和 EM_FINDTEXTEX 都是一样的。 FR_DOWN如果指定了这个标志值,搜索操作从当前选定的 end 位置开始,直到控件中正文的 end 位置结束(向下搜索)。这个标志仅影响 RichEdit 2.0 和以后版本: 这个是 RichEdit 1.0 的缺省行为。RichEdit 2.0 或以后版本的缺省行为是在当前选定正文内的从结尾搜索到开始位置(向前搜索)。 概括来说就是,如果你使用 RichEdit 1.0, 无论你做什么都没法影响搜索的方向:它总使用向后搜索。但是如果你使用 RichEdit 2.0 而且你想使用向后搜索的话,你必须指定这个标志值,否则使用的是向前搜索了。FR_MATCHCASE如果指定了这个标志值,搜索操作是大小写敏感的,即区分大小写。FR_WHOLEWORD如果设置了这个标志值,搜索操作就搜寻匹配指定搜索串的整个词。实际上,还有更多的标志值,但是它们都是跟非英语系正文操作相关的。lParam == FINDTEXT 结构的指针。 FINDTEXT STRUCT chrg CHARRANGE <> lpstrText DWORD ? FINDTEXT ENDSchrg 是一个 CHARRANGE 结构,其定义如下: CHARRANGE STRUCT cpMin DWORD ? cpMax DWORD ? CHARRANGE ENDScpMin 包含字符数组中第一个字符的字符索引。cpMax 包含紧跟在字符数组中最后一个字符的字符的字符索引。 基本上,要搜索一个正文串,你必须指定要搜索的字符范围。 cpMin 和 cpMax 的具体意义根据搜索是向后还是向前是不同的。 如果是向后搜索,cpMin 指定搜索的开始字符索引, 而 cpMax 则是结束字符索引。 如果是向前搜索,则反过来才对, 也就是说 cpMin 包含结束字符索引而cpMax 包含开始字符索引。 lpstrText 是要搜索的正文串的指针。 EM_FINDTEXT 返回控件中跟搜索串匹配的的正文串的一个字符的索引。 如果没找到匹配的则返回 -1。 EM_FINDTEXTEXwParam == 搜索选项,跟 EM_FINDTEXT 的一样。lParam == FINDTEXTEX 结构的指针。 FINDTEXTEX STRUCT chrg CHARRANGE <> lpstrText DWORD ? chrgText CHARRANGE <> FINDTEXTEX ENDSFINDTEXTEX 中开始的两个成员是跟 FINDTEXT 结构中的一样的。 chrgText 是一个 CHARRANGE 结构,如果搜索到匹配串的话, 其开始/结束字符索引会被填入这个结构中。 EM_FINDTEXTEX 的返回值跟 EM_FINDTEXT的是一样的。 EM_FINDTEXT 跟 EM_FINDTEXTEX 的不同处 是 FINDTEXTEX 结构有一个另外的chrgText成员, 如果搜索到匹配串的话, 其开始/结束字符索引会被填入这个成员中。 如果我们想对这个正文串进行更多的正文操作的话,有这个就方便多了。
替换/插入正文
RichEdit 控件提供了 EM_SETTEXTEX 来进行正文替换/插入操作。 这个消息混合了 WM_SETTEXT 和 EM_REPLACESEL 的功能. 它具有以下语法: EM_SETTEXTEX wParam == SETTEXTEX 结构的指针。 SETTEXTEX STRUCT flags DWORD ? codepage DWORD ? SETTEXTEX ENDS flags 可以是以下值的组合: ST_DEFAULT删除Undo堆栈,丢弃RTF格式,替换所有的正文。ST_KEEPUNDO保留Undo堆栈。ST_SELECTION替换选定正文并且保留RTF格式 codepage 是一个常量,指定你的正文想要的代码页。我们通常简单的使用 CP_ACP。
正文选择
我们可以使用消息 EM_SETSEL 或者 EM_EXSETSEL 来编程选择正文. 其中任意的一个都可以工作的很好。要使用哪一个消息要根据可用的字符索引格式来选择。 如果它们保存在一个 CHARRANGE 结构中,则使用 EM_EXSETSEL更容易实现。 EM_EXSETSEL wParam == 没有使用,必须为 0 。 lParam == CHARRANGE 结构的指针,包含想要选定的正文字符范围。
事件通知
在使用多行Edit控件时,你必须子类化它以便得到输入信息象鼠标/键盘事件等。
上一篇:破解 女性基础体温管理软件 v1.2
下一篇:DFCG破解入门第二课
|