0
点赞
收藏
分享

微信扫一扫

C++语言学习笔记15:Clean 垃圾清理插件

爱做梦的夏夏 2022-04-14 阅读 64
c++学习mfc

C++语言学习笔记15:Clean 垃圾清理插件

对话框

  • 模态对话框》阻塞的
  • 非模态对话框》非阻塞的

STET1 图片切换功能

导入位图资源

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ceqxMX5O-1649784573980)(C:\Users\Nothingserious\source\repos\Clean\res\win7.bmp)]

    win8

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j984SHRh-1649784573983)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220411125320.png)]

    • CCleanDlg::OnInitDialog()函数

      image-20220411125440602

插入图片控件并修改属性

  • image-20220411125209875

添加消息处理函数

  • image-20220411131307264

  • 自动生成代码:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YjwPgxJt-1649784573988)(C:\Users\Nothingserious\AppData\Roaming\Typora\typora-user-images\image-20220411131349614.png)]

    image-20220411131405053

  • image-20220411125751594

  • 自动生成代码:

    image-20220411130117581

    静态 控件与资源进行绑定:(会自动生成~)

    image-20220411130137561

  • 补充代码

    image-20220411132149234

    image-20220411131609111

step2 开发思路及类关系图

Clean-开发思路

Clean-类关系图

step3 添加控件及MFC类

  • image-20220411134247517

    image-20220411134256851

  • 会自动生成该类的h和cpp文件(不截图啦)

  • 在CleanDlg类中添加该类的对象

    image-20220411134528710

  • 绑定

    image-20220411135151037

  • 初始化tab及设置宽高

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qJknyeFP-1649784574001)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220411173632.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ijqQEcoB-1649784574002)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220411173613.png)]

image-20220411173652040

step4 设置各对话框

清扫/显示目录窗口
  • image-20220411172927632

  • 在CmyTabCtrl类中定义对象

    image-20220411173713346

  • 创建+显示

    image-20220411174407636

    image-20220411180419903

    image-20220411180313820

    • 效果

      image-20220411180601594

设置目录窗口
  • image-20220411181004829

  • 添加MFC窗口类: CSetDlg 对话框//不截图啦 和上面的清扫目录是一样的

  • 在父窗口定义对象:同清扫目录~

  • image-20220411182318700

  • 效果

image-20220411182216125

窗口的切换功能

即点击tab进行相应窗口的显示。

  • 思路:见step 2 开发思路示意图1的部分 ,此为有类的情况,因此进行如下操作。

  • image-20220411182633352

  • 消息映射表自动生成

    image-20220411182831679

  • 类中自动生成

    image-20220411182853199

  • 事件处理函数编写

    image-20220411184355366

    注意初始状态修改:

    image-20220411184448071

step 5 清扫/显示界面的按钮功能编写

添加目录功能
  • 添加事件处理程序

  • 分析:由于添加目录及读取目录的操作在show窗口及set窗口都用到了,为提高代码复用性,可以将其封装成一个方法(封装到应用程序Clean.h中)进行,然后进行调用。

    • image-20220411185603550

    • image-20220411192948730

    • image-20220411192903637

    • 至此成功获取,但还需要将其显示到list框里。

      • list控件添加MFC类

      • image-20220411193650597

      • showdlg中定义对象,然后和控件进行绑定

      • image-20220411194250050

      • image-20220411194315874

      • image-20220411194338309

      • 要的是列向展示文件路径而不是横向图标,所以改一下控件样式

        image-20220411194625169

      • List中显示选中的文件的路径

        image-20220411200254599

      • 效果:

      • image-20220411200705476

      • 勾选就放到删除的部分啦,勾选-》删除~见后文

删除目录功能
  • 勾选 复合样式(拓展风格)函数 放在初始化部分,先在showdlg里加初始化函数

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PmoxQF7v-1649784574024)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220411204910.png)]

    image-20220411205139485

  • 效果:

  • image-20220411205228177

  • 删除事件处理程序补充~注意i–的部分!

  • image-20220411210358955

清空目录功能
  • 添加事件处理程序

    image-20220411200515059

step 6 右击菜单功能设置

菜单显示

  • 新建菜单资源

    image-20220411210640204

  • image-20220411210807717

  • CMylistCtrl中定义对象

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C7GlYAvS-1649784574029)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220411210947.png)]

    image-20220411211334899

  • 绑定资源,弹出菜单

    image-20220411211621568

    image-20220411213025897

  • 0 编辑 效果

    image-20220411210807717

    image-20220411213127325

  • 1 12 效果

    image-20220411213239496

    image-20220411213245945

菜单事件处理功能添加

image-20220411213504309

image-20220411214143602

image-20220411214819955

step 5 设置目录界面的按钮功能编写

下拉列表

  • 添加对象

    image-20220412001235615

    image-20220412001301749

    image-20220412001422255

  • 选一下初始化~

image-20220412001533505

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hTXeleh2-1649784574038)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220412005327.png)]

  • 改一下样式~

image-20220412002250333

“请选择目录”功能实现

  • 分析:点击请选择目录后 下拉列表收缩 弹出选择目录对话框 由此可以分析 以下拉列表收缩为契机 添加事件处理程序

    image-20220412002716402

  • image-20220412005716192

选择后确定功能的实现

  • image-20220412010350749

  • 添加类,加完以后定义对象

    image-20220412010505419

    image-20220412010631063

    image-20220412010738558

  • 修改样式

    image-20220412011345005

  • 确定的功能函数编写

    image-20220412011445741

    • 当前效果:

      image-20220412011539561

  • 封装一个方法去找路径下的子项

    image-20220412011847583

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wB2ndngR-1649784574045)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220412011905.png)]

    image-20220412013125422

  • 然后再在确定中进行调用就行

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xDx2DlgQ-1649784574046)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220412013153.png)]

    • 效果》展开了一层,里面的文件夹没有展开,期望是点击确定及加号后展开一层,内部文件夹再点加号再展开一层的效果

      image-20220412013227544

    • 为完成上述功能,进行如下操作:

      image-20220412100232172

      image-20220412103808433

      • 效果:
      • image-20220412103428296
      • 解决方法:加一个判断,如果子项已经存在,就不用再重复添加拉~具体代码如下:
      • image-20220412104212252

完成功能(截取后缀名的实现)

  • image-20220412131306025
  • image-20220412131320862
  • image-20220412132039854
  • 效果:
  • image-20220412132049561

清空功能的实现(清空tree里的内容)

  • image-20220412132418684

step 6 显示目录的搜索窗口

搜索窗口显示:展开与收缩

image-20220412154653228

  • 效果:

    image-20220412154912565

  • 默认展开,需要变更成默认为收缩的状态 点击显示目录再展开 再次点击时收缩

    • 在主窗口的初始化函数CCleanDlg::OnInitDialog()里面进行编写,但是GetwindowRect获取的并不是准确的坐标值,这部分代码放在重绘CCleanDlg::OnPaint()里比较好~

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zkgbRejq-1649784574053)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220412185839.png)]

  • 点击进行状态修改~

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-io4qR0eo-1649784574054)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220412193506.png)]

    • 由于isExpend和m_expend的目的是一样的,因此可以只用其中一个,代码做如下修改:

      image-20220412192837423

搜索功能的实现

  • 修改样式

    image-20220412232905350

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ANOkTGwz-1649784574056)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220413003839.png)]

  • void CCleanDlg::OnBnClickedButton1()	//搜索按钮功能事件	
    {
    	// TODO: 在此添加控件通知处理程序代码
    	queue<CString> que;
    
    	for (int i = 0; i < m_mytab.m_showdialog.m_showlist.GetItemCount(); i++)	//遍历
    	{
    		if (m_mytab.m_showdialog.m_showlist.GetCheck(i)) 	//判断是否为选中状态
    		{
    			CString strPath = m_mytab.m_showdialog.m_showlist.GetItemText(i, 0);	//获取勾选的文本
    			que.push(strPath);
    		}	
    	}
        m_searchList.DeleteAllItems();	//搜索前先清空 避免重复搜索添加~
    	while (que.size() > 0)
    	{
    		CString strPath = que.front();	//取出节点里的值
    		if (strPath.Right(1) != L"\\") 
    		{
    			strPath += L"\\";
    		}
    		CFileFind fileF;
    		BOOL b = fileF.FindFile(strPath + L"*.*");
    		while (b)
    		{
    			b = fileF.FindNextFile();
    			if (fileF.IsDots())		//过滤.  ..
    			{
    				continue;
    			}
    			CString fileName = fileF.GetFileName();
    			if (fileF.IsDirectory()) 	//判断是文件还是目录
    			{	//目录	//继续找内部文件
    				que.push(strPath + fileName);
    			}
    			else
    			{	//文件	//获取后缀名
    				int index = fileName.ReverseFind(L'.');
    				if (index != -1)	//找到了
    				{
    					CString suffix = fileName.Right(fileName.GetLength() - index);
    					//后缀名匹配
    					if (m_mytab.m_setdlg.m_suffix.count(suffix))	//存在 匹配上了
    					{
    						//将拼接完的路径插入到搜索结果中
    						m_searchList.InsertItem(m_searchList.GetItemCount(), strPath + fileName);
    					}
    				}
    			}
    		}
    		que.pop();		//删除节点
    	}
    }
    
  • 效果:

    image-20220413004106016

删除功能的实现

  • 加勾选框样式

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cxWbuqLd-1649784574057)(https://cdn.jsdelivr.net/gh/mozro0327/mynotes/images/20220413004728.png)]

  • 效果:

  • image-20220413011436992

  • 删除功能实现

    image-20220413012224166

举报

相关推荐

0 条评论