当前位置:C++技术网 > 资讯 > 清理垃圾文件软件源代码解析1

清理垃圾文件软件源代码解析1

更新时间:2015-11-13 21:53:30浏览次数:1+次

我们看下该软件的大概框架,项目名为CClearTmpFile:

请选择文件后面是一个组框控件,这是他的type属性:

组合框其实就是把一个编辑框和一个列表框组合到了一起,分为三种:简易(Simple)组合框、下拉式(Dropdown)组合框和下拉列表式(Drop List)组合框。下面讲讲它们的区别。:
简易组合框中的列表框是一直显示的,效果如下图:

下拉式组合框默认不显示列表框,只有在点击了编辑框右侧的下拉箭头才会弹出列表框,列表框弹出后如下图:

下拉列表式组合框的编辑框是不能编辑的,只能由用户在下拉列表框中选择了某项后,在编辑框中显示其文本。下拉列表式组合框如下图:

接着我们为这个组合框添加控件变量m_Disk,一个控件的变量有两种-控件变量,值变量,请看《控件变量与值变量的区别》。
value只是用来传递数据,不能对控件进行其它的操作。
control型变量可以获得控件的实例,通过这个变量,你可以操纵控件。
value型变量仅仅可以获得该控件的public型变量
如果你添加了一个m_CtrlEdit的control型变量你可以调用控件支持的所有函数,如:
m_CtrlEdit.GetStyle(...)
获得控件的输入内容或者说文本内容:
CString str_name;
m_CtrlEdit.GetWindowText(str_name);
MessageBox(str_name,"提示",0);
而value型变量一般用于向控件传递数据,如:变量为CString 类型的 m_Str   m_Str="hustwjz";  
UpdateData(FALSE); //可以向控件传递数据
UpdateData(TRUE); //可以从控件获得数据  
接着就是获取电脑中磁盘的盘符了。
我们在CClearTmpFileDlg头文件中添加一个函数来实现加载盘符:
BOOL LoadDiskLetter();这是我们自己定义的函数,只需要声明函数,接着写出他的实现就行了:

BOOL CClearTmpFileDlg::LoadDiskLetter()				//加载系统盘符
{
	DWORD dwLen = GetLogicalDriveStrings(0, NULL);	//获取系统盘符字符串的长度
	if (dwLen > 0)
	{
		char *pNameList = new char[dwLen + 1];		//分配一个字符缓冲区
		memset(pNameList, 0, dwLen + 1);
		GetLogicalDriveStrings(dwLen, pNameList);	                                                                                        //获取系统盘符,将其存在pNameList中,格式为"C:\ D:\ E:\ F:\ ..."
		char *pItem = pNameList;
		while (*pItem != '\0')       //各盘符之间有一个空格,需要分解字符串,获取每一个盘符
		{
			m_Disk.AddString(pItem);				//向组合框中添加盘符
			pItem += strlen(pItem) + 1;//执行下一个盘符,加1是为过滤掉各盘符间的一个空格
		}
		delete[] pNameList;						//释放字符缓冲区
		return TRUE;								//操作成功,返回TRUE
	}
	return FALSE;
}
对于这个函数的实现功能,我在《如何获得磁盘字符串》解释过了,你可以看看,在这里我就不详述了。
接着就是我们的列表框控件也就是组合框下面的那个控件。对于这个我在《MFC-CCheckListBox》解释了,在这里我补充说,我们需要为这个函数关联控件变量,以获得字符串。
这两个函数都是需要在程序已运行就实现出来的,因此,我们把它放在对话框类初始化函数中也就是OnInitDialog中,
接着就是处理我们的"全选""取消"按钮的消息响应。这两个函数的作用就是全选列表框中的临时文件后缀或者是取消全选。
手写代码建立消息响应,创建函数实现代码:
void CClearTmpFileDlg::OnAllSel()
{
	int nItemCount = m_ExtList.GetCount();
	for (int i = 0; i<nItemCount; i++)		//遍历项目
	{
		if (m_ExtList.GetCheck(i) != BST_CHECKED)	//项目被选中
		{
			m_ExtList.SetCheck(i, BST_CHECKED);
		}
	}
}
这仅仅是函数的实现部分,你还需要在对话框类头文件中加上:
afx_msg void OnAllSel();
在对话框类的实现文件中加上:
ON_BN_CLICKED(IDC_ALL_SEL, OnAllSel)(注意这里不能有任何标点符号)
代码分析:
我们利用与列表框关联的变量来获取其中的临时文件后缀数量
int nItemCount = m_ExtList.GetCount();
接着遍历列表框中的项目数,判断是否某个项目被选中
同理”取消“按钮实现代码即声明代码都一样。