暮鼓集 行走集
原作于2008年03月21日
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的一些属性。
dlg->Create( TRUE, TEXT(""), NULL, FR_HIDEUPDOWN|FR_MATCHCASE, this );
这段代码每运行一次会出现一个Dialog,为了避免出现这种情况,可以进行下面的判断
if( dlg!=NULL && !dlg->IsTerminating() )
return;
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();
BOOL bCase = m_dlgFind->MatchCase();
BOOL bMarch = m_dlgFind->MatchWholeWord();
m_strFind = m_dlgFind->GetFindString();
if( m_dlgFind->FindNext() )
{
... // 在这里写与应用程序相关的搜索过程
}
return 0;
}
本文介绍了如何使用MFC的CFindReplaceDialog类创建无模式的Find/Replace对话框。通过new在堆中分配对象,用Create函数显示对话框,并设置初始字符串和属性。同时,文章讲解了如何响应对话框的消息,包括注册消息ID、映射到函数以及实现OnFindReplace函数。
1830

被折叠的 条评论
为什么被折叠?



