查找文字

【勇芳软件工作室】汉化HomePreviousNext

本主题描述显示和管理“查找”对话框的示例代码,以便用户可以指定搜索操作的参数。该对话框将向您的窗口过程发送消息,以便您可以执行搜索操作。

用于显示和管理“替换”对话框的代码是类似的,只是使用ReplaceText函数来显示该对话框。“替换”对话框还会发送消息以响应“替换和替换全部”按钮上的用户点击。

要使用“查找或替换”对话框,必须执行三个单独的任务:

1.获取FINDMSGSTRING注册消息的消息标识符。

2.显示对话框。

3.打开对话框时处理FINDMSGSTRING消息。

初始化应用程序时,请调用RegisterWindowMessage功能获取FINDMSGSTRING注册消息的消息标识符。

UINT uFindReplaceMsg; // FINDMSGSTRING的消息标识符

uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING);

要显示“查找”对话框,首先初始化FINDREPLACE结构,然后调用FindText函数。请注意,FINDREPLACE结构和搜索字符串的缓冲区应该是一个全局或静态变量,所以在对话框关闭之前,它不会超出范围。您必须设置hwndOwner成员以指定接收注册消息的窗口。创建对话框后,可以使用返回的句柄来移动或操作该对话框。

FINDREPLACE fr; //常见的对话框结构

HWND hwnd; //所有者窗口

CHAR szFindWhat[80]; //缓冲区接收字符串

HWND hdlg = NULL; //“查找”对话框的句柄

//初始化FINDREPLACE
ZeroMemory(&fr, sizeof(FINDREPLACE));

fr.lStructSize = sizeof(FINDREPLACE);

fr.hwndOwner = hwnd;

fr.lpstrFindWhat = szFindWhat;

fr.wFindWhatLen = 80;

fr.Flags = 0;

hdlg = FindText(&fr);

当对话框打开时,主消息循环必须包含对IsDialogMessage功能的调用。将对话框的窗口句柄作为IsDialogMessage调用中的参数传递。这样可以确保对话框正确处理键盘消息。

要监视从对话框发送的消息,您的窗口过程必须检查FINDMSGSTRING注册的消息,并处理在FINDREPLACE结构中传递的值,如以下示例所示:

LPFINDREPLACE lpfr;

if (message == uFindReplaceMsg){

//从lParam获取指向FINDREPLACE结构的指针。

lpfr = (LPFINDREPLACE)lParam;

//如果设置了FR_DIALOGTERM标志,

//使识别对话框的句柄无效。

if(lpfr- >标志& FR_DIALOGTERM){

hdlg = NULL;

return 0;

}

//如果设置了FR_FINDNEXT标志,

//调用应用程序定义的搜索例程

//搜索所请求的字符串。

if(lpfr- >标志& FR_FINDNEXT)

SearchFile(lpfr->lpstrFindWhat,

(BOOL)(lpfr- >标志& FR_DOWN),

(BOOL) (lpfr->Flags & FR_MATCHCASE));

return 0;

}