| 网站首页 | 新人学院 | 两性健康 | 创业学院 | 小游戏 | QQ 专区 | 性知识 | 图片 | 下载 | 推介 | 交友 | 健康无优 | 
□  您现在的位置: 新人无忧 >> 新人学院 >> 编程技巧 >> VC >> 正文
 
 

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

来源:Internet 点击数: 更新时间:2006-1-20 4:26:20   
在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为传递给回调函数

[1] [2] 下一页

相关文章: 认识svchost.exe进程
winavi教程,转换视频格式,刻录标准vcd、DVD
查杀svchost全过程
全面了解系统中 svchost.exe文件
去伪存真:Svchost.exe≠冲击波
[stisvc.exe]系统进程分析
 □ 学院热点更新 
·让我们远离病毒八项基本原则
·教你彻底防杀木马病毒(强列
·十大流氓软件完全卸载全攻略
·让ADSL永不断线--操作实战演
·有关网络的基础知识(入门手
·上网一千问(新人上网必看)
·[注意]电脑故障的排除原则、
·电脑故障排除的一般分析方法

Windows 2003服务器安

QQ图标全攻略(图)

【新手上网必看】什么

实用技巧 彻底而又简单
设为首页 - 友情连接 - 问题反馈 - 免责声明 - 广告服务 - 收藏本站 - 网站地图
www.jy361.com[新人无忧] 版权所有 Copyright©2004-2007
资源来源网络,版权规作者所有。新人学院为您提供学习的平台,谢谢对我们的支持。