在Windows通用對話框中,查找/替換對話框是比較特殊的一個,它是一個非模態對話框,所以它的使用與其它通用對話框有所不同。
一、注冊
注冊的目的有兩個,一是說明在程序中要使用查找/替換對話框,二是讓窗口能響應查找/替換消息,提供相應的消息函數。
注冊位置應該在查找/替換對話框的父窗口,比如主框架窗口CMainFrame、視圖CxxVIEw或某對話框。也就是響應查找/替換操作的那個窗口。
比如,欲在視圖中響應查找/替換操作,則在視圖中加入下面的注冊代碼(紅字為添加的代碼):
class CEditTestView : public CFormVIEw
{
…………
protected:
//{{AFX_MSG(CEditTestVIEw)
…………
afx_msg LONG OnFindReplace(WPARAM wParam,LPARAM lParam);
DECLARE_MESSAGE_MAP()
};
IMPLEMENT_DYNCREATE(CEditTestView, CFormVIEw)
static UINT WM_FINDREPLACE = ::RegisterWindowMessage( FINDMSGSTRING );
BEGIN_MESSAGE_MAP(CEditTestView, CFormVIEw)
//{{AFX_MSG_MAP(CEditTestVIEw)
…………
//}}AFX_MSG_MAP
ON_REGISTERED_MESSAGE(WM_FINDREPLACE,OnFindReplace)
END_MESSAGE_MAP()
注冊完成後,OnFindReplace()函數可用來接收查找/替換對話框的用戶消息,另外用ClassWizard打開CEditTestVIEw,可以發現ID_EDIT_FIND和ID_EDIT_REPLACE兩個ID號,可以用來添加查找/替換菜單,這在注冊前是沒有的。
二、對話框的創建與顯示
作為非模態對話框,必須用new操作符分配存儲空間,再用Create()函數進行初始化,最後用ShowWindow()函數顯示對話框。
下面的例子是創建一個查找對話框:先在菜單中用ID號ID_EDIT_FIND添加一個“查找”菜單項,再用ClassWizard添加它的響應函數OnEditFind(),加入代碼。
//查找菜單響應函數
void CEditTestVIEw::OnEditFind()
{
CFindReplaceDialog* pDlg = new CFindReplaceDialog();
pDlg->Create( true, NULL, NULL, FR_DOWN, this ); //創建查找對話框
pDlg->ShowWindow( SW_SHOW ); //顯示對話框
}
Create()函數的原型如下:
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指向對話框
[1] [2] 下一頁