[转]SendMessage函数的常用消息及其应用7
时 间:2008-12-09 08:09:53
作 者:andymark ID:1350 城市:深圳
摘 要:SendMessage函数的常用消息及其应用
正 文:
SendMessage函数应用(五)
RichEdit控件的正文操作
一、正文搜索
RichEdit 控件具有几种正文操作,搜索指定正文就是其中的一种。搜索正文是通过发送
EM_FINDTEXT 或者 EM_FINDTEXTEX 消息来完成的。这两个消息有一点很小的不同点。
1.EM_FINDTEXT
wParam=搜索选项,可以是下面3个参数的任意组合值(这些选项对 EM_FINDTEXT 和 EM_FINDTEXTEX
都是一样的):
①FR_DOWN(&H1):搜索方向。如果指定了这个标志值,搜索操作从当前选定的 end 位置开始,直到控件
中正文的 end 位置结束(向下搜索)。这个标志影响 RichEdit 2.0 和以后版本,是 RichEdit 1.0
的缺省行为。RichEdit 2.0或以后版本的缺省行为是:在当前选定正文内的从结尾搜索到开始位置
(向前搜索)。概括来说就是,如果你使用 RichEdit 1.0, 无论你做什么都没法影响搜索的方向,它
总使用向后搜索。但是如果你使用 RichEdit 2.0 而且你想使用向后搜索的话,你必须指定这个标
志值,否则使用的是向前搜索了。
②FR_MATCHCASE(&H4):区分大小写。
③FR_WHOLEWORD(&H2):匹配指定搜索串的整个词。
lParam = FINDTEXT 结构的指针。
Type FINDTEXT 'STRUCT
chrg As CHARRANGE '
lpstrText As Long
End Type
chrg 是一个 CHARRANGE 结构,其定义如下:
Type CHARRANGE 'STRUCT
cpMin As Long '包含字符数组中第一个字符的字符索引
cpMax As Long '包含紧跟在字符数组中最后一个字符的字符的字符索引
End Type
基本上,要搜索一个正文串,你必须指定要搜索的字符范围。cpMin 和 cpMax 的具体意义根据搜索是向
后还是向前是不同的。
如果是向后搜索,cpMin 指定搜索的开始字符索引,而 cpMax 则是结束字符索引。
如果是向前搜索,则反过来才对,也就是说 cpMin 包含结束字符索引而cpMax 包含开始字符索引。
lpstrText 是要搜索的正文串的指针。
2.EM_FINDTEXTEX
返回控件中跟搜索串匹配的的正文串的一个字符的索引。如果没找到匹配的则返回 -1。
wParam = 搜索选项,跟 EM_FINDTEXT 的一样。
lParam = FINDTEXTEX 结构的指针。
Type FINDTEXTEX 'STRUCT
chrg As CHARRANGE '
lpstrText As Long
chrgText CHARRANGE 'CHARRANGE
End Type
FINDTEXTEX 中开始的两个成员是跟 FINDTEXT 结构中的一样的。
chrgText 是一个 CHARRANGE 结构,如果搜索到匹配串的话,其开始/结束字符索引会被填入这个结构中。
EM_FINDTEXTEX 的返回值跟 EM_FINDTEXT的是一样的。
EM_FINDTEXT 跟 EM_FINDTEXTEX 的不同处:
FINDTEXTEX 结构有一个另外的chrgText成员, 如果搜索到匹配串的话,其开始/结束字符索引会被填入这个成
员中。如果我们想对这个正文串进行更多的正文操作的话,有这个就方便多了。
二、替换/插入正文
RichEdit 控件提供了 EM_SETTEXTEX 来进行正文替换/插入操作。这个消息混合了 WM_SETTEXT 和
EM_REPLACESEL 的功能. 它具有以下语法:
wParam = SETTEXTEX 结构的指针。
Type SETTEXTEX 'STRUCT
flags As Long
codepage As Long
End Type
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控件时,你必须子类化它以便得到输入信息象鼠标/键盘事件等。RichEdit 控件提供了一
个更好的方案,它可以把这些消息通知父窗口。为了注册得到通知消息,父窗口发送 EM_SETEVENTMASK 消息
给 RichEdit 控件,指定它对哪些消息感兴趣。
EM_SETEVENTMASK 具有以下的语法:
wParam 没有使用,必须为 0 。
lParam = 事件掩码值,可以是以下标志值的任意组合:
ENM_CHANGE 发送 EN_CHANGE 通知
ENM_CORRECTTEXT 发送 EN_CORRECTTEXT 通知
ENM_DRAGDROPDONE 发送 EN_DRAGDROPDONE 通知
ENM_DROPFILES 发送 EN_DROPFILES 通知
ENM_KEYEVENTS 为键盘消息发送 EN_MSGFILTER 通知
ENM_LINK Rich Edit 2.0 或以后版本: 当鼠标在具有 CFE_LINK 风格的正文上面移过,而且执行了一个
或几个鼠标动作时,就发送 EN_LINK 通知。
ENM_MOUSEEVENTS 为鼠标消息发送 EN_MSGFILTER 通知。
ENM_OBJECTPOSITIONS 发送 EN_OBJECTPOSITIONS 通知
ENM_PROTECTED 发送 EN_PROTECTED 通知
ENM_REQUESTRESIZE 发送 EN_REQUESTRESIZE 通知
ENM_SCROLL 发送 EN_HSCROLL 和 EN_VSCROLL 通知
ENM_SCROLLEVENTS 为鼠标滑轮发送 EN_MSGFILTER 通知。
ENM_SELCHANGE 发送 EN_SELCHANGE 通知
ENM_UPDATE 发送 EN_UPDATE 通知
Rich Edit 2.0 和以后版本: 这个标志值会被忽略,而经常发送 EN_UPDATE 通知。然而如果 RichEdit
3.0 模拟 RichEdit 1.0的话,你必须使用这个标志值来发送 EN_UPDATE 通知
上面的所有通知都被做为 WM_NOTIFY 消息来发送:你必须检查 NMHDR 结构的 code 成员来得到通知消
息。譬如,如果你想注册得到鼠标消息(也就是说,你想提供一给上下文相关的弹出菜单)
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)
- Access快速开发平台--让有权...(11.04)
- Access快速开发平台--审批选...(11.01)
- ACCESS两张表先各自排序,然后...(10.31)