IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> MFC 通用对话框之“查找/替换“对话框 -> 正文阅读

[C++知识库]MFC 通用对话框之“查找/替换“对话框

CFindReplaceDialog类封装了查找/替换对话框,使用CFindReplaceDialog类可以,可以轻松地在应用程序中实现标准的字符串查找/替换对话框 。不像其他通用对话框是模态对话框,查找/替换对话框是非模态对话框。CFindReplaceDialog对象有两种:查找对话框和查找/替换对话框。尽管对话框允许用户输入搜索和搜索/替换字符串,但它们不执行任何搜索或替换函数。 您必须将它们添加到应用程序中。

要构造一个CFindReplaceDialog对象,使用提供的构造函数(它没有参数)。 由于这是一个非模态对话框,所以使用new操作符在堆上分配对象,而不是在堆栈上。一旦CFindReplaceDialog对象被构造,你必须调用Create成员函数来创建和使用ShowWindow函数显示对话框。在调用Create之前可使用m_fr结构来初始化对话框。 m_fr结构的类型是FINDREPLACE。FINDREPLACE的原型如下:

typedef struct { 
  DWORD        lStructSize; 
  HWND         hwndOwner; 
  HINSTANCE    hInstance; 
  DWORD        Flags; 
  LPTSTR        lpstrFindWhat; 
  LPTSTR        lpstrReplaceWith; 
  WORD         wFindWhatLen; 
  WORD         wReplaceWithLen; 
  LPARAM        lCustData; 
  LPFRHOOKPROC lpfnHook; 
  LPCTSTR       lpTemplateName; 
} FINDREPLACE, *LPFINDREPLACE; 

为了让父窗口得到查找/替换请求的通知,必须使用WindowsRegisterWindowMessage函数,并在你的框架窗口中使用处理此注册消息的ON_REGISTERED_MESSAGE消息映射宏。?你可以从框架窗口的回调函数中调用CFindReplaceDialog类成员表的“操作”部分中列出的任何成员函数。CFindReplaceDialog类的成员如下:

下面以一个实例来演示,CFindReplaceDialog的用法。

示例(基于演示文件对话框所创建的单文档工程):

1. 在IDR_MAINFRAME 菜单文件中新建“FindReplaceTestTest”菜单,及子菜单“Find”、“Find & Replace”,如下:

2. 在视图类中添加一个CFindReplaceDialog指针变量pDlg,如下:

3. 为Find子菜单添加事件处理程序,如下:

void CFileDialogTestView::OnFind()
{
	// TODO: 在此添加命令处理程序代码
	pDlg = new CFindReplaceDialog();
	pDlg->Create(TRUE,NULL, NULL, FR_DOWN,this);
	pDlg->ShowWindow(SW_SHOW);
}

4.?为Find & Replace子菜单添加事件处理程序,如下:

void CFileDialogTestView::OnFindReplace()
{
	// TODO: 在此添加命令处理程序代码
	pDlg = new CFindReplaceDialog();
	pDlg->Create(FALSE, NULL, NULL, FR_DOWN, this); //find & replace
	pDlg->ShowWindow(SW_SHOW);
}

?5.在类视图头文件中注册一个Windows消息,代码如下:

// FileDialogTestView.h: CFileDialogTestView 类的接口
//

#pragma once

static  UINT WM_FINDMESSAGE = RegisterWindowMessage(FINDMSGSTRING);//register windows message

6. 在类视图头文件中定义毁掉函数OnFindReplace(WPARAM wParm, LPARAM lParam),如下:

7. 在?类视图源文件(.app)中,添加消息映射宏,如下:ON_REGISTERED_MESSAGE(WM_FINDMESSAGE, OnFindReplace)

8.实现回调函数源代码,如下:?

LRESULT CFileDialogTestView::OnFindReplace(WPARAM wParm, LPARAM lParam)
{
	CString findTxt, replaceTxt;
	int pos = -1;
	BOOL bReplace = pDlg->ReplaceCurrent();
	if (!bReplace)
	{
		findTxt = pDlg->GetFindString();
		pos = mstr.Find(findTxt);
		if (-1 == pos)
		{
			CString strTem;
			strTem.Format(L"\"%s\"not found", findTxt);
			MessageBox(strTem);
		}	
		else
		{
			CString strTem;
			strTem.Format(L"\"%s\" found at: %d", findTxt, pos);
			MessageBox(strTem);
		}
	}
	else
	{
		findTxt = pDlg->GetFindString();
		pos = mstr.Find(findTxt);
		replaceTxt = pDlg->GetReplaceString();
		MessageBox(replaceTxt);
		if (-1 != pos)
		{
			mstr.Replace(findTxt, replaceTxt);
			CClientDC dc(this);
			CString oldString = mstr;
			COLORREF oldCr = dc.SetTextColor(mCurrentCr);
			CFont mfont;
			CFont* pOldfont;
			mfont.CreateFontIndirectW(&mLogfont);
			pOldfont = dc.SelectObject(&mfont);
			COLORREF clr = dc.SetTextColor(dc.GetBkColor());
			dc.TextOutW(startPoint.x, startPoint.y, oldString);
			dc.SetTextColor(clr);
			dc.TextOutW(startPoint.x, startPoint.y, mstr);
			dc.SelectObject(&pOldfont);
			dc.SetTextColor(oldCr);
		}
		else
			MessageBox(L"None is replaced");
	}
	return 0;
}

9.按Ctrl+F5试运行,结果如下:

?10,点击FileDialogTest 菜单下的子菜单Font,设置字体,如下:

??11,点击FileDialogTest 菜单下的子菜单Single Line Text,完成一行文字输入,如下:

?

?11,点击FindReplaceTest?菜单下的子菜单Find

?打开Find对话框,输入EF,如下:

?点击“查找下一个”,结果如下:

?点击弹出信息框的确定后,输入:123,点击“查找下一个”,结果如下:

?12. 关闭查找对话框后,点击“Find & Replace”子菜单,打开替换对话框

?在查找内容输入框中输入:D,在替换为输入框中输入:12345

?点击替换,结果如下:

?需要注意的是,不要寄希望于“查找/替换对话框"替你完成查找于替换的代码,仅是提供一个对话框及发送FINDMSGSTRING注册消息而已。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 21:33:09  更:2022-03-13 21:33:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:26:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码