Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14506435
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:00:16

下载本文示例代码
  在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指向对话框的父窗口,如果为NULL,则为主框架窗口,使用时需让它指向接收查找/替换消息的窗口。  上例中定制的是一个查找窗口,它显示为:   如果定制一个查找/替换窗口,可以添加OnEditReplace()函数: //替换菜单响应函数void CEditTestView::OnEditReplace() { CFindReplaceDialog* pDlg = new CFindReplaceDialog(); pDlg->Create( false, m_FindString, m_ReplaceString, FR_DOWN, this );//创建替换对话框 pDlg->ShowWindow( SW_SHOW ); //显示对话框}   m_FindString和m_ReplaceString是预定义的字符串变量,用于初始化查找框和替换框。这时它显示为:   在Create()创建对话框前,也可以用成员变量m_fr对对话框进行更详细的定制。  三、响应查找/替换消息  查找/替换对话框显示后,其后单击其上任何一个按钮,消息都被送到窗口回调函数OnFindReplace()函数中,所以我们不需要为每个按钮添加消息函数,所有对按钮消息的处理都在OnFindReplace()函数中进行即可。  这里要注意一点,查找/替换对话框本身没有查找/替换功能,它只是为我们提供了一个接收用户要求的接口,使我们知道用户提出了何种查找/替换要求,真正的查找/替换工作需另行编程实现。这一点与文件对话框相似,用打开文件对话框不能真的打开文件,它只是让我们知道用户想要打开哪个文件而已。  在OnFindReplace()函数中,我们可以用CFindReplaceDialog类的成员函数获知用户请求,其中主要的有:static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam);  获取当前查找/替换对话框的指针。参数lParam为传递给回调函数OnFindReplace()的lParam值。  BOOL FindNext()const;  检取用户是否单击“查找下一个”按钮。  BOOL ReplaceCurrent()const;  检取用户是否单击“替换”按钮。  BOOL ReplaceAll()const;  检取用户是否单击“全部替换”按钮。  利用以上几个函数可以获知用户单击了哪个按钮。但在查找/替换时,还需要知道用户的查找/替换设置,这可以用下面的函数检取这些设置:  CString GetFindString()const;  检取查找的字符串。它可能与设置的初始值不同。  CString GetReplaceString()const;  检取替换的字符串。  BOOL SearchDown()const;  检取查找方向,为TRUE时表示“向下查找”。  BOOL MatchCase()const;  检取“区分大小写”状态,为TRUE时表示要求区分大小写。  BOOL MatchWholeWord()const;  检取“全字匹配”状态,为TRUE时表示要求全字匹配。  以下就是注册的OnFindReplace()函数,其中“……”为需要用户编写的查找/替换操作。 LONG CEditTestView::OnFindReplace(WPARAM wParam,LPARAM lParam) {  CFindReplaceDialog* pDlg = CFindReplaceDialog::GetNotifier(lParam); m_FindString = pDlg->GetFindString(); //查找串 m_ReplaceString = pDlg->GetReplaceString(); //替换串  if( pDlg->FindNext() ) //查找下一个  {   …………;  }  if( pDlg->ReplaceCurrent() ) //替换  {   …………;  }  if( pDlg->ReplaceAll() ) //全部替换  {   …………;  }   return 0; }   示例程序是一个简易文本编辑器,模仿记事本的查找/替换形式设计了相应的查找/替换形式。  示例程序界面图: 编辑推荐:为VC 应用程序对话框添加透明位图   在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指向对话框的父窗口,如果为NULL,则为主框架窗口,使用时需让它指向接收查找/替换消息的窗口。  上例中定制的是一个查找窗口,它显示为:   如果定制一个查找/替换窗口,可以添加OnEditReplace()函数: //替换菜单响应函数void CEditTestView::OnEditReplace() { CFindReplaceDialog* pDlg = new CFindReplaceDialog(); pDlg->Create( false, m_FindString, m_ReplaceString, FR_DOWN, this );//创建替换对话框 pDlg->ShowWindow( SW_SHOW ); //显示对话框}   m_FindString和m_ReplaceString是预定义的字符串变量,用于初始化查找框和替换框。这时它显示为:   在Create()创建对话框前,也可以用成员变量m_fr对对话框进行更详细的定制。  三、响应查找/替换消息  查找/替换对话框显示后,其后单击其上任何一个按钮,消息都被送到窗口回调函数OnFindReplace()函数中,所以我们不需要为每个按钮添加消息函数,所有对按钮消息的处理都在OnFindReplace()函数中进行即可。  这里要注意一点,查找/替换对话框本身没有查找/替换功能,它只是为我们提供了一个接收用户要求的接口,使我们知道用户提出了何种查找/替换要求,真正的查找/替换工作需另行编程实现。这一点与文件对话框相似,用打开文件对话框不能真的打开文件,它只是让我们知道用户想要打开哪个文件而已。  在OnFindReplace()函数中,我们可以用CFindReplaceDialog类的成员函数获知用户请求,其中主要的有:static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam);  获取当前查找/替换对话框的指针。参数lParam为传递给回调函数OnFindReplace()的lParam值。  BOOL FindNext()const;  检取用户是否单击“查找下一个”按钮。  BOOL ReplaceCurrent()const;  检取用户是否单击“替换”按钮。  BOOL ReplaceAll()const;  检取用户是否单击“全部替换”按钮。  利用以上几个函数可以获知用户单击了哪个按钮。但在查找/替换时,还需要知道用户的查找/替换设置,这可以用下面的函数检取这些设置:  CString GetFindString()const;  检取查找的字符串。它可能与设置的初始值不同。  CString GetReplaceString()const;  检取替换的字符串。  BOOL SearchDown()const;  检取查找方向,为TRUE时表示“向下查找”。  BOOL MatchCase()const;  检取“区分大小写”状态,为TRUE时表示要求区分大小写。  BOOL MatchWholeWord()const;  检取“全字匹配”状态,为TRUE时表示要求全字匹配。  以下就是注册的OnFindReplace()函数,其中“……”为需要用户编写的查找/替换操作。 LONG CEditTestView::OnFindReplace(WPARAM wParam,LPARAM lParam) {  CFindReplaceDialog* pDlg = CFindReplaceDialog::GetNotifier(lParam); m_FindString = pDlg->GetFindString(); //查找串 m_ReplaceString = pDlg->GetReplaceString(); //替换串  if( pDlg->FindNext() ) //查找下一个  {   …………;  }  if( pDlg->ReplaceCurrent() ) //替换  {   …………;  }  if( pDlg->ReplaceAll() ) //全部替换  {   …………;  }   return 0; }   示例程序是一个简易文本编辑器,模仿记事本的查找/替换形式设计了相应的查找/替换形式。  示例程序界面图: 编辑推荐:为VC 应用程序对话框添加透明位图 下载本文示例代码


VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用VC 中查找/替换对话框的使用
阅读(200) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~