龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC++中查找/替换对话框的使用(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
三、响应查找/替换消息 查找/替换对话框显示后,其后单击其上任何一个按钮,消息都被送到窗口回调函数OnFindReplace()函数中,所以我们不需要为每个按钮

  三、响应查找/替换消息

  查找/替换对话框显示后,其后单击其上任何一个按钮,消息都被送到窗口回调函数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;

  示例程序是一个简易文本编辑器,模仿记事本的查找/替换形式设计了相应的查找/替换形式。

精彩图集

赞助商链接