1. 程式人生 > >使用CFindReplaceDialog

使用CFindReplaceDialog

暮鼓集    行走集

原作於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;
}