• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
VC++中查找/替换对话框的使用
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
VC++中查找/替换对话框的使用
软件发布 VC++中查找/替换对话框的使用
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 编程技术 >> VC教程 >> VC++中查找/替换对话框的使用

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

添加时间: 2006-2-10 23:50:53  作者: VC教程  阅读次数:461   来源: http://www.d9soft.com

            在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纯资源DLL解决国际化问题 下一篇文章: VC分割窗口后限制分割条移动范围

相关文章:

  • 使用搜狗音乐盒下载歌曲,快带飚的体验
  • 教你如何使用Procmail 过滤mail病毒
  • 对数据库字段使用默认值
  • 使用Web服务虚拟化Oracle数据库
  • 如何使用Oracle的BFILE

相关软件:

  • 全国计算机等级考试模拟软件(2006年全年使用)二级Visual Basic V9.0
  • 手机解锁、测试、升级、工程模式查找器 7.01
  • 晶体管替换速查字典 3.0
  • 查找重复文件 1.6
  • 正则表达式替换工具 V1.0.0.7
  • 网页替换清除专家 V2.6

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • VC++之Button控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Scroll Bar
  • VC++之Scroll Bar
  • VC++之List Box/Check List Box控...
  • VC++ Combo Box/Combo Box Ex控件
  • VC++ List Ctrl控件

VC教程阅读排行

  • VC++之List Box/Check List Box控...
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • VC++之Button控件
  • VC++之Tab Ctrl控件
  • VC++之Edit Box控件
  • VC++之Edit Box控件
  • VC遍历整个目录树查找文件
  • VC++之Scroll Bar
  • 深入编程:控制面板知多少?

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • 第二章 PowerBuilder 入门之创建新...
  • VC++之List Box/Check List Box控...
  • 第一章 什么是PowerBuilder
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有