使用CFindReplaceDialog
阿新 • • 發佈:2019-01-05
暮鼓集 行走集
原作於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;
}