您的位置:首页 > 其它

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

2014-07-20 10:40 169 查看
“查找/替换”对话框都属于“非模态”对话框,在使用查找、替换对话框前,需要在当前窗口类中添加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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: