vc++6.0 中创建查找搜索对话框

 
查找和替换 对话框也是非模态对话框,所以创建过程和MFC下创建非模态对话框的过程有点类似.

先Create出一个窗口,设置好相关参数然后在显示出来使用就OK.

Create原型:
virtual BOOL Create(BOOL bFindDialogOnly, // TRUE for Find, FALSE for FindReplace
LPCTSTR lpszFindWhat,                                    //默认被查找的字符串
LPCTSTR lpszReplaceWith = NULL              //默认被查找替换的字符串
DWORD dwFlags = FR_DOWN,                              //设置对话框里面的一些属性啦,下面说明了相关标志
CWnd* pParentWnd = NULL);                            //对话框的父窗口

dwFlags相关标志说明(网上COPY来的):

          FR_DOWN 如果设置,对话框中的“向下查找”单选按钮被选中,如果没有设置,“向上查找”单选按钮被选中;

   FR_HIDEUPDOWN 不显示查找方向单选按钮;

   FR_HIDEMATCHCASE 不显示区分大小写复选按钮;

   FR_HIDEWHOLEWORD 不显示全字匹配复选按钮;
  
   FR_MATCHCASE 使区分大小写复选按钮处于选中状态;

   FR_WHOLEWORD 使全字匹配复选按钮处于选中状态;

   FR_NOMATCHCASE 使区分大小写复选按钮处于禁止(变灰)状态;

   FR_NOUPDOWN 使查找方向单选按钮处于禁止(变灰)状态;

   FR_NOWHOLEWORD 使全字匹配复选按钮处于禁止(变灰)状态;

   FR_SHOWHELP 在对话框中显示一个帮助按钮。

如下是创建一个查找窗口的实例:

CFindReplaceDialog *pFindDlg = new CFindReplaceDialog;    //由于是非模态对话框这里用new命令分配内存
if (!pFindDlg->Create(TRUE,_T( "hyp's Knowledge Base"), NULL,FR_DOWN|FR_MATCHCASE|FR_WHOLEWORD , this)) //上面说明了
{
      return;
}
pFindDlg->ShowWindow(SW_SHOW);    //窗口创建完毕要显示出来
pFindDlg->SetActiveWindow();      //设置为活动窗口

如下是创建一个查找替换窗口的实例:

CFindReplaceDialog *pReplaceDlg= new CFindReplaceDialog;
if(!pReplaceDlg->Create(FALSE,_T( "hyp"),_T( "hyp's Knowledge Base"),FR_DOWN, this))
{
      return;
}
pReplaceDlg->ShowWindow(SW_SHOW);
pReplaceDlg->SetActiveWindow();

显示的出来的对话框还需要添加一些响应函数吧,我找了一下发现没有现成的消息响应-_-网上google了一下发现要自己添加我汗.

大体步骤是这样子的:

在你添加查找替换对话框的头文件的#pragma once下面加入

const int WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING); //将FINDMSGSTRING注册为WM_FINDREPLACE消息

并在头文件生成的消息映射函数

afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam);

在源文件里面将消息映射函数与WM_FINDREPLACE消息关联

BEGIN_MESSAGE_MAP(...)

...

ON_REGISTERED_MESSAGE(WM_FINDREPLACE, OnFindReplace)

...

END_MESSAGE_MAP()

接下来编写OnFindReplace函数就OK了

LONG ChypDlg::OnFindReplace( WPARAM wparam, LPARAM lparam )
{
      // TODO: 在此添加控件通知处理程序代码
      CFindReplaceDialog* pDlg = CFindReplaceDialog::GetNotifier(lparam);
      //具体查找替换代码就自己编写
      // pDlg->GetFindString();   该函数可以返回查找字符串
      // pDlg->GetReplaceString(); 该函数可以返回查找替换串
      //pDlg->SearchDown();   该函数可以判断是向上还是向下搜索,TRUE是向下,反之OOXX
      //pDlg->MatchCase();   该函数可以判断是否区分大小写
      //pDlg->MatchWholeWord(); 该函数可以判断是否全字匹配
      if( pDlg != NULL )
      {

              if( pDlg->FindNext() )
              {
                      MessageBox( "FindNext!", "hyp's Knowledge Base" ,MB_OK);
              }
              else
                      if( pDlg->ReplaceAll() )
                      {
                              MessageBox( "ReplaceAll!", "hyp's Knowledge Base", MB_OK);
                      }
                      else
                              if( pDlg->ReplaceCurrent() ){
                                      MessageBox( "ReplaceCurrent!", "hyp's Knowledge Base", MB_OK);
                              }
      }
      delete pDlg; //加上这个点击完毕以后会自动销毁对话框
      return 1;
}

具体实现搜索和替换的功能就添加在OnFindReplace函数里面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值