极语言官方网站

查找替换对话框——编辑文本

显示一个无模式对话框,该对话框允许用户指定要搜索的字符串,以及在搜索文档中的文本时要使用的选项。

“ 替换 ”对话框允许用户指定要搜索的字符串和替换字符串,以及用于控制操作的选项。

通过初始化 查找替换类 结构并将该结构传递给查找选框函数,可以创建并显示“查找”对话框。

下图显示了一个典型的“ 查找 ”对话框。

通过初始化 查找替换类 结构并将结构传递给 替换选框函数,可以创建并显示“替换”对话框。

下图显示了一个典型的“ 替换 ”对话框。

与其他常见对话框不同,“查找 ”和“ 替换 ”对话框是无模式的。

无模式对话框允许用户在对话框和创建对话框的窗口之间切换。

这对于让用户搜索字符串、切换到应用程序窗口以处理字符串,

以及切换回对话框以搜索另一个字符串很有用,而无需重复打开对话框所需的命令。

如果 搜索选框 或 替换选框 函数成功创建对话框,它将返回对话框的句柄。

可以使用此句柄移动对话框并与之通信。

如果函数无法创建对话框,则返回 NULL。可以通过调用 对话错误 函数来检索扩展的错误值来确定错误的原因。

在创建 “查找 ”或“ 替换 ”对话框之前,必须调用 注册消息 函数以获取 "commdlg_FindReplace" 已注册消息的消息标识符。

然后可以使用标识符来检测和处理从对话框发送的消息。

当用户单击对话框中的 “查找下一个”、“ 替换”或“ 全部替换 ”按钮时,

对话框过程会将消息发送到所有者窗口的窗口过程。

创建对话框时,查找替换类 结构的 窗口 成员标识所有者窗口。

查找替换消息的 ④数据 参数是指向在创建对话框时指定的 查找替换类 结构的指针。

在发送消息之前,对话框使用最新的用户输入设置此结构的成员,包括要搜索替换的字符串以及查找和替换操作的选项。

查找替换消息中,查找替换类结构的 标志 成员包含以下标志之一,用于指示导致消息的事件。


中文名字英文名称数值作用解释
向下查找FR_DOWN1如果设置,则选择方向单选按钮的 向下 按钮,指示用户想要从当前位置到文档末尾进行搜索。 如果未设置 向下 ,则选择“ 向上 ”按钮,以便用户想要搜索到文档的开头。
全字匹配FR_WHOLEWORD2如果设置,则选中“匹配整个Word仅检查”框,指示用户只想搜索与搜索字符串匹配的整个单词。 如果未设置全字匹配,则未选中检查框,因此还应搜索与搜索字符串匹配的单词片段。
分大小写FR_MATCHCASE4如果设置,则选中“匹配大小写检查框,指示用户希望搜索区分大小写。 如果未设置分大小写,则取消选中检查框,以便搜索不区分大小写。
查下一个FR_FINDNEXT8用户单击了“查找”或“替换”对话框中的“查找下一个”按钮。 查找 成员指定要搜索的字符串。
选中替换FR_REPLACE0x10用户单击了“ 替换 ”对话框中的“ 替换 ”按钮。 查找 成员指定要替换的字符串,替换 成员指定替换字符串。
全部替换FR_REPLACEALL0x20用户单击了“ 替换 ”对话框中的“全部 替换 ”按钮。 查找 成员指定要替换的字符串,替换 成员指定替换字符串。
查找关闭FR_DIALOGTERM0x40对话框正在关闭。所有者窗口处理此消息后,对话框的句柄不再有效。

代码示例:
整数 查换消息;//在窗体消息函数前面申请此整数变量
查找替换类 查换(长度=40,标志=1,查长=64,替长=64);//结构数据的长度=40,标志=1向下,查找和替换的文字长度=64
文本 查找[64],替换[64];//申请文本变量的内存缓冲区,用来存储查找和替换的文字
为 查换消息 查找替换(窗口);//在窗体消息的判断(消息)下方插入这段代码
程序段 窗体启动;//以上代码为全局变量,在窗体启动程序段进行赋值
查换消息=注册消息("commdlg_FindReplace");//获取已注册消息的消息标识符。
查换.窗口=窗体;//指定查找替换对话框的窗口为程序主窗体
查换.查找=查找;//指定查找替换对话框的查找为文本缓冲区
查换.替换=替换;//指定查找替换对话框的替换为文本缓冲区
结束//换到其它地方书写代码
程序段 按钮2_点击;//在按钮2的点击事件里弹出查找对话框
搜索选框(查换)//使用定义的查找替换类调用搜索选框弹出对话框
结束//换到其它地方书写代码
程序段 按钮3_点击;//在按钮3的点击事件里弹出替换为对话框
替换选框(查换)//使用定义的查找替换类调用替换选框弹出对话框
结束//换到其它地方书写代码
程序段 查找替换(窗口)//窗体消息收到查换消息时调用此函数
整数 功能=查换.标志 & $F8;//从标志里去掉1向下,2全字匹配,4区分大小写,这三项信息
查换.标志=查换.标志 & 7;//标志只保留1向下,2全字匹配,4区分大小写,这三项信息
判断(功能)为 8 搜索内容(0)//单击查找下一个按钮,执行继续搜索内容
为 16{替换内容;搜索内容(0)}//单击了替换按钮,替换当前选中文字,继续搜索内容
为 32{选中位置(0,0)搜索内容(1)}//单击了全部替换按钮,改光标位置为起始处,搜索内容提交参数1为循环搜索并替换
结束//搜索内容和替换内容都是程序段代码,需要使用发送消息函数实现

查找替换类

中文名字英文名称长度作用解释
查找替换类FINDREPLACE40弹出一个查找或替换文本的对话框
查找替换类——成员表
中文英文类型作用解释
长度lStructSize整数指定这个结构的大小,以字节为单位。
窗口hwndOwner整数拥有对话框的窗口的句柄。可不指定
实例hInstance整数Flags设置了FR_ENABLETEMPLATEHANDLE标志,则 hInstance 是包含对话框模板的内存对象的句柄。
设置了FR_ENABLETEMPLATE标志,是包含对话框模板的模块句柄。
标志Flags整数1选向下;2全字匹配;4大小写;8查找下个;$10替换;$20全部替换;$40关闭;$80显示帮助;$100回调;$200实例模板;$400禁用方向;
$800禁用大小写;$1000禁用全字匹配;$2000忽略模板;$4000隐藏方向;$8000隐藏大小写;$10000隐藏全字匹配;
查找lpstrFindWhat整数如果指定了FR_FINDNEXT标志,则要包含搜索的字符串。
FR_DOWN、FR_WHOLEWORD和FR_MATCHCASE标志指示搜索的方向和类型。
如果指定FR_REPLACE或FR_REPLACE标志,则要包含替换的字符串。
替换lpstrReplaceWith整数如果指定FR_REPLACE或FR_REPLACEALL标志,则要包含替换字符串 。
查长wFindWhatLen整形查找字符缓冲区长度
替长wReplaceWithLen整形替换字符缓冲区长度
数据lCustData整数自定义数据,传到的钩子程序
回调lpfnHook整数指向钩子程序的指针,该钩子可以处理回调消息。
模板lpTemplateName整数指向对话框模板资源名称的字符串