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

来源:互联网 发布:网络信息安全技术 编辑:程序博客网 时间:2024/06/06 09:18

    “查找/替换”对话框都属于“非模态”对话框,在使用查找、替换对话框前,需要在当前窗口类中添加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 heredlg = new CFindReplaceDialog;dlg->Create(TRUE,NULL);dlg->ShowWindow(SW_SHOW);find = TRUE;}

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

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

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

// TODO: Add extra initialization hereCString 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 0
原创粉丝点击