用MFC实现“查找/替换”对话框

83 篇文章 0 订阅

    “查找/替换”对话框都属于“非模态”对话框,在使用查找、替换对话框前,需要在当前窗口类中添加ON_REGISTERED_MESSAGE消息映射宏,用于设置回调函数以处理查找或替换行为。本实例实现了通过査找对话框在文本中进行査找/替换的功能。实例运行结果如下图所示。

关键技术:

    CFindDialog类封装了通用的“查找/替换”对话框。它提供了多个方法用于获取査找数据时的选项。 使用Create方法可以创建査找/替换对话框,语法如下:

BOOL Create( BOOL bFindDialogOnly, LPCTSTR IpszFindWhat,
LPCTSTR IpszReplaceWith = NULL, DWORD dwFlags = FR_DOWN, CWnd* pParentWnd = NULL);


Create语法中的参数说明如表(1)所示。

表(1) Create语法中的参数说明

 

使用如下:

  dlg = new CFindReplaceDialog;
 dlg->Create(TRUE,NULL);
 dlg->ShowWindow(SW_SHOW);

或者

dlg = new CFindReplaceDialog;
 dlg->Create(FALSE,NULL);
 dlg->ShowWindow(SW_SHOW);

 

设计过程:

(1)创建一个基于对话框的应用程序。

(2)向对话框中添加一个RichEdit控件和两个按钮控件。

(3)为RichEdit控件添加变量m_RichEdit,Category选"Control",要使用RichEdit控件必须在显示对话框前调用AfxInitRichEdit()函数;

图(2)添加m_RichEdit变量,种类为Control

图(2.1)在XXX.cpp中添加AfxInitRichEdit()函数

(4)在主窗口的头文件(即XXXDlg.h)中,声明一个CFindReplaceDialog类的对象dlg和一个BOOL类型变量find。

图(3)声明对象dlg 和变量find,还有函数OnFindReplace()

(5)在XXXDlg.cpp中,定义一个新消息WM_FINDMESSAGE,代码如下: static UINT WM_FINDMESSAGE = RegisterWmdowMessage<FlNDMSGSTRING);

图(4)添加新消息:WM_FINDMESSAGE

(6)在对话框的消息映射部分,添加映射宏:     ON_REOISTERED_MESSAGE(WM_FINDMESSAOE, OnFindRepUce)

图(5)在BEGIN...END之间添加映射宏

(7)添加WM_FINDMESSAGE消息的处理函数,实现査找和替换操作,代码如下:

long CFindAndReplaceDlg::OnFindReplace(WPARAM wParam, LPARAM lParam)
{
	CString strText,repText;
	strText = dlg->GetFindString();
	CString str;
	m_RichEdit.GetWindowText(str);
	int index = str.Find(strText,0);
	int len;
	if(find)
	{
		len = strText.GetLength();
	}
	else
	{
		repText = dlg->GetReplaceString();
		len = repText.GetLength();
		str.Replace(strText,repText);
		m_RichEdit.SetWindowText(str);	
	}
	m_RichEdit.SetSel(index,index+len);
	m_RichEdit.SetFocus();
	return 0;
}

8)为“查找”按钮处理单击事件,创建“查找”对话框的代码如下:

void CFindDialogDlg::OnButton1() //“查找”功能按钮,为“非模态”对话框
{
	// TODO: Add your control notification handler code here
	dlg = new CFindReplaceDialog;
	dlg->Create(TRUE,NULL);
	dlg->ShowWindow(SW_SHOW);
	find = TRUE;
}

9)为“替换”按钮处理单击事件,创建“替换”对话框的代码如下:

void CFindDialogDlg::OnButton2() //“替换”功能按钮,为“非模态”对话框
{
	// TODO: Add your control notification handler code here
	dlg = new CFindReplaceDialog;
	dlg->Create(FALSE,NULL);
	dlg->ShowWindow(SW_SHOW);
	find = FALSE;
}

10)在XXXDlg.cpp的OnInitDialog()中,添加如下代码:

// TODO: Add extra initialization here
	CString str="";
	str += "花间一壶酒,独酌无相亲。\r\n";
	str += "举杯邀明月,对影成三人。\r\n";
	str += "月既不解饮,影徒随我身。\r\n";
	str += "暂伴月将影,行乐须及春。\r\n";
	str += "我歌月徘徊,我舞影凌乱。\r\n";
	str += "醒时同交欢,醉后各分散。\r\n";
	str += "永结无情游,相期渺云汉。\r\n";
	m_RichEdit.SetWindowText(str);







 


  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值