查找和替换 对话框也是非模态对话框,所以创建过程和MFC下创建非模态对话框的过程有点类似.
先Create出一个窗口,设置好相关参数然后在显示出来使用就OK.
dwFlags相关标志说明(网上COPY来的):
FR_DOWN 如果设置,对话框中的“向下查找”单选按钮被选中,如果没有设置,“向上查找”单选按钮被选中;
FR_HIDEUPDOWN 不显示查找方向单选按钮;
FR_HIDEMATCHCASE 不显示区分大小写复选按钮;
FR_HIDEWHOLEWORD 不显示全字匹配复选按钮;
FR_MATCHCASE 使区分大小写复选按钮处于选中状态;
FR_WHOLEWORD 使全字匹配复选按钮处于选中状态;
FR_NOMATCHCASE 使区分大小写复选按钮处于禁止(变灰)状态;
FR_NOUPDOWN 使查找方向单选按钮处于禁止(变灰)状态;
FR_NOWHOLEWORD 使全字匹配复选按钮处于禁止(变灰)状态;
FR_SHOWHELP 在对话框中显示一个帮助按钮。
如下是创建一个查找窗口的实例:
如下是创建一个查找替换窗口的实例:
显示的出来的对话框还需要添加一些响应函数吧,我找了一下发现没有现成的消息响应-_-网上google了一下发现要自己添加我汗.
大体步骤是这样子的:
在你添加查找替换对话框的头文件的#pragma once下面加入
并在头文件生成的消息映射函数
在源文件里面将消息映射函数与WM_FINDREPLACE消息关联
接下来编写OnFindReplace函数就OK了
具体实现搜索和替换的功能就添加在OnFindReplace函数里面,嗯 差不多把整个类都说完了,那就这样子吧,这几天争取把对话框都介绍一篇吧.
另一篇:
Find/Replace Dialog是Windows Common Dialog的一种,一般用于在文档中提供查询或替换的人机界面。
MFC提供了CFindReplaceDialog类,可以用来建立标准的Find/Replace Dialog。不过,它的使用方法与其它的Common Dialog如CFileDialog等有所不同,它是一个无模式(Modeless)的Dialog。
典型应用
1. 建立CFindReplaceDialog对象
因为是Modeless的Dialog,所以需要使用new来在heap中分配,而不能在stack中。
CFindReplaceDialog *dlg;
dlg = new CFindReplaceDialog();
2. 使用其成员函数Create建立和显示Dialog
virtual BOOL Create ( BOOL bFindDialogOnly,
LPCTSTR lpszFindWhat,
LPCTSTR lpszReplaceWith = NULL,
DWORD dwFlags = FR_DOWN,
CWnd* pParentWnd = NULL );
lpszFindWhat, lpszReplaceWith是初始字符串,将显示在Dialog的Find和Replace输入框中
dwFlags可以控制CFindReplaceDialog的一些属性。
这段代码每运行一次会出现一个Dialog,为了避免出现这种情况,可以进行下面的判断
if( dlg!=NULL && !dlg->IsTerminating() )
return;
//m_dlg为全局变量. 如下写法不能关闭m_dlg,否则报错
if (m_dlg != NULL)
{
m_dlg->SetActiveWindow(); //激活对话框
m_dlg->CenterWindow();
}
else
{
m_dlg=new CFindReplaceDialog();
m_dlg->Create( FALSE, TEXT(""), NULL, FR_DOWN, this );
}
3. 响应CFindReplaceDialog的消息
首先注册消息的ID:
static UINT WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);
再在MESSAGE MAP中增加到函数的映设
BEGIN_MESSAGE_MAP(...)
ON_REGISTERED_MESSAGE(WM_FINDREPLACE, OnFindReplace)
END_MESSAGE_MAP()
在类的声明中添加函数OnFindReplace的声明:
afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam);
函数的实现:
LONG ClanspiderDlg::OnFindReplace(WPARAM wParam,LPARAM lParam)
{
// 可以用下面这些成员函数取得用户输入
BOOL bDown = m_dlgFind->SearchDown(); //#add m_dlgFind为程序的主对话框
BOOL bCase = m_dlgFind->MatchCase();
BOOL bMarch = m_dlgFind->MatchWholeWord();
m_strFind = m_dlgFind->GetFindString();
if( m_dlgFind->FindNext() )
{
... // 在这里写与应用程序相关的搜索过程
}
return 0;
}
重要成员函数:
CFindReplaceDialog类:封装了标准查找/替换对话框
CFindReplaceDialog::Create 创建一个Find或Find/Replace对话框对象
BOOL Create(BOOL bFindDialogOnly,LPCTSTR lpszFindWhat,LPCTSTR lpszReplaceWhat=NULL,DWORD dwFlag=FR_DOWN,CWnd* pParentWnd=NULL);
参数:bFindDialogOnly 为TRUE时,显示查找对话框,为FALSE时,显示查找/替换对话框;
lpszFindWhat 指定要查找的串的缺省值;
lpszReplaceWhat 指定替换串的缺省值;
dwFlag为标志位,用来定制对话框,它可以是一个或多个标志的组合,主要取值如下:
FR_DOWN 如果设置,对话框中的“向下查找”单选按钮被选中,如果没有设置,“向上查找”单选按钮被选中;
FR_HIDEUPDOWN 不显示查找方向单选按钮;
FR_HIDEMATCHCASE 不显示区分大小写复选按钮;
FR_HIDEWHOLEWORD 不显示全字匹配复选按钮;
FR_MATCHCASE 使区分大小写复选按钮处于选中状态;
FR_WHOLEWORD 使全字匹配复选按钮处于选中状态;
FR_NOMATCHCASE 使区分大小写复选按钮处于禁止(变灰)状态;
FR_NOUPDOWN 使查找方向单选按钮处于禁止(变灰)状态;
FR_NOWHOLEWORD 使全字匹配复选按钮处于禁止(变灰)状态;
FR_SHOWHELP 在对话框中显示一个帮助按钮。
pParentWnd 指向父窗口或属主窗口的指针。
返回值:若创建成功,返回非0值,否则返回0。
CFindReplaceDialog::FindNext 确定用户是否要查找串的下一个出现处
BOOL FindNext()const;
返回值:若用户单击查找“下一个”按钮,则返回非0值,否则返回0。
CFindReplaceDialog::GetFindString 检取对话框中的查找字符串
CString GetFindString()const;
返回值:对话框中的查找字符串
CFindReplaceDialog::GetNotifier 检取当前查找/替换对话框的指针
static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam);
参数:lParam 传递给回调函数OnFindReplace()的lParam值
返回值:指向当前查找/替换对话框的指针
CFindReplaceDialog::GetReplaceString 检取对话框中的替换字符串
CString GetReplaceString()const;
返回值:对话框中的替换字符串
CFindReplaceDialog::IsTerminating 检取对话框是否终止
BOOL IsTerminating()const;
返回值:若用户终止对话框,返回非0值,否则返回0
CFindReplaceDialog::MatchCase 检取区分大小写复选按钮状态
BOOL MatchCase()const;
返回值:如果区分大小写复选按钮被选择,返回非0值,否则返回0
CFindReplaceDialog::MatchWholeWord 检取全字匹配复选按钮状态
BOOL MatchWholeWord()const;
返回值:如果全字匹配复选按钮被选择,返回非0值,否则返回0
CFindReplaceDialog::ReplaceAll 确定用户是否要求全部替换
BOOL ReplaceAll()const;
返回值:如果用户要求全部替换,返回非0值,否则返回0
CFindReplaceDialog::ReplaceCurrent 确定用户是否要求替换当前选择串
BOOL ReplaceCurrent()const;
返回值:如果用户要求替换当前选择串,返回非0值,否则返回0
CFindReplaceDialog::SearchDown 检取查找方向
BOOL SearchDown()const;
返回值:如果为向下查找,返回非0值;若为向上查找,返回0