C++学习 2019-1-22

1.继续Clean项目

1.1 将 CSetDlg 中的树形控件中点击过的目录保存到一个容器当中

1.给树形控件 CMyTreeCtrl 添加一个点击消息,右键类视图中的 CMyTreeCtrl 类,在消息中选择 =NM_CLICK 消息并添加;
2.在 CMyTreeCtrl::OnNMClick 函数中,首先获取点击时的鼠标坐标: CPoint cur_point ; ::GetCursorPos(&cur_point) ;
3.由于 GetCursorPos 函数获得的坐标是相对于系统窗口的,因此我们应该将其转换到客户区上: this->ScreenToClient(&cur_point) ;
4.获取点击的项的句柄: hTreeItem = this->HitTest(cur_point) ;
5.将其存储到容器中(这里的容器是我们定义为成员的 set m_stClickItem 集合);

void CMyTreeCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
	// 获取点击的这一项
	CPoint cur_point;
	::GetCursorPos(&cur_point);
	this->ScreenToClient(&cur_point);				// 将坐标从屏幕转换为客户区

	HTREEITEM hTreeItem = this->HitTest(cur_point);
	// 把获取到句柄的保存到集合当中
	m_stClickItem.insert(hTreeItem);

	*pResult = 0;
}

1.2 给 SetDlg 对话框上的 完成 按钮添加点击消息处理函数

1.遍历所有在树形控件中被点击过的项;
2.判断被点击过的项是否被选中;
3.若被选中,则获取该句柄中的文本,并截取后缀并保存;
4.若保存后缀名的集合为空,则设置文件格式失败;
5.保存后缀名的集合 m_stExName 被提前定义为类成员;

void CSetDlg::OnBnClickedButton3()
{
	// 对点击的所有进行查询
	set<HTREEITEM>::iterator ite = m_my_tree.m_stClickItem.begin();

	// 遍历tree的set集合
	while (ite != m_my_tree.m_stClickItem.end())
	{
		// 判断是否是选中的项
		if(m_my_tree.GetCheck(*ite) == TRUE)
		{
			// 若是选中的项,获取这一项的文本
			CString strName = m_my_tree.GetItemText(*ite);

			// 获取这一项文本的后缀
			int index_point = strName.ReverseFind('.');
			if(index_point != -1)							// 不为-1即为找到了 '.'
			{
				CString strExName = strName.Right(strName.GetLength() - index_point);
				// 将截取到的后缀保存到一个集合中
				m_stExName.insert(strExName);
			}
		}
		ite = m_my_tree.m_stClickItem.erase(ite);
	}

	// 若后缀字符集合为空则设置失败,否则设置成功
	if(m_stExName.size() <= 0)
		MessageBox(L"设置失败");
	else
	{
		MessageBox(L"设置成功");
	}
}

1.3 给 SetDlg 对话框上的 清空目录 按钮添加点击消息处理函数

1.清空目录 按钮是将两个 set 集合中的元素都删除;

void CSetDlg::OnBnClickedButton2()
{
	// 该函数是用来进行删除 mytreectrl 中的set集合以及 setdlg 中的set集合
	m_my_tree.m_stClickItem.clear();
	m_stExName.clear();
	if(m_my_tree.m_stClickItem.empty() && m_stExName.empty())
		MessageBox(L"清空成功");
}

1.4 给主对话框拉长的下部(就是不显示的那一部分)中的左边按钮命名为 搜索 ,右边按钮命名为 删除 ,给这两个按钮添加点击命令消息

1.首先添加 搜索 的命令消息,我们在 搜索 的消息中是以 ShowDlg 中的 添加目录 的路径为搜索路径,以 SetDlg 中选择的文件的后缀名为搜索文件格式进行搜索的,并将搜索结果显示到拉长之后的 List Control 控件上;
2.先给拉长之后的 List Control 控件添加一个变量,右键控件,添加变量,变量类型为 CListCtrl ,变量名为 m_lcDeletePath ;在 CleanDlg 类的 CCleanDlg::OnInitDialog 函数中更改拉长之后的 m_lcDeletePath 的风格为可复选的;
3.我们先来完成 删除 按钮的消息处理函数,首先我们遍历 m_lcDeletePath 的所有项,判断是否被选中,若选中,则获取选中项的路径,并删除这个路径下的相关文件,再在 m_lcDeletePath 中去掉已被删除的路径;

void CCleanDlg::OnBnClickedButton2()
{
	// 点击主窗口上的 删除 按钮会删除显示list中的路径的文件
	// 遍历所有的list中的选项
	for(int i=0; i<m_lcDeletePath.GetItemCount(); i++)
	{
		// 判断当前项是否被选中
		if(m_lcDeletePath.GetCheck(i) == TRUE)
		{
			// 被选中则先获取文本
			CString strPath = m_lcDeletePath.GetItemText(i, 0);
			// 将这个路径中的文件删除
			::DeleteFile(strPath);

			// 在list中删除选中的路径
			m_lcDeletePath.DeleteItem(i);

			--i;							// 当有连续选中时需要进行 -- 操作
		}
	}
}

4.当点击 搜索 按钮时,我们需要将 CShowDlg 中的被选中的路径取下来,将这些被选中的路径保存到一个队列中去;本次只单纯的将 CShowDlg 中的被选中的路径取下来并保存,不涉及搜索相同后缀名的操作,具体搜索操作留到明天进行学习;还须将 m_lcDeletePath 的属性 View 更改为 List ;

void CCleanDlg::OnBnClickedButton1()
{
	// 主对话框中的 搜索 按钮
	queue<CString> qu;

	// 去下 标签中CShowdlg中的list中的选中文本
	for(int i=0; i<m_tab.m_showdlg.m_lcShowPath.GetItemCount(); i++)
	{
		// 判断是否选中
		if(m_tab.m_showdlg.m_lcShowPath.GetCheck(i) == TRUE)
		{
			// 选中则获取 字符串路径
			CString strPath = m_tab.m_showdlg.m_lcShowPath.GetItemText(i, 0);
			qu.push(strPath);
		}
	}

	// 取得选中路径之后就需要开始进行搜索相关的文件
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值