1.前言
本文将带领大家来写一个U盘小偷的项目。
事实上,我已经写过一篇关于控制台版本U盘小偷的文章,可以参考这篇文章:手写一个U盘小偷
这篇文章里面涉及到的很多东西可能目前还没有讲到,所以推荐先学习一下本文再去看控制台版本的U盘小偷。
同时为了兼顾学习MFC编程、以及让程序更加好看,所以本文将打算用MFC
写一个带界面的U盘小偷。
这里先介绍一下U盘小偷的运行原理:
- 监听U盘消息。
- 遍历U盘中的所有文件。
- 将U盘中的所有文件拷贝到计算机硬盘中。
考虑到小偷这个属性,我们就还需要隐藏我们的程序,还有考虑到拷贝文件的效率,还需要采用多线程等等。
2.前置工作
这次的项目名称为day13--UThief
,建立MFC项目,选用基于对话框和使用静态库,其它选项都随意,默认都行,影响不大。
然后将默认的控件都删除掉:
这里注意一下,对话框的里面还有一圈蓝色的虚线,这个虚线是控件能摆放的范围,即控件只能放在这个虚线之内。
所以一般我都会将这个虚线拖大到窗口大小,这样整个窗口都可以摆放控件了。
既然这个项目的主要功能是拷贝文件,那么我们就得先有一个控件用于显示拷贝的过程吧。
这里就用到了前面提到的编辑框了,它除了可以用于输入,当然也可以用于输出信息。
拖一个编辑框控件,然后将它拉大,可以通过下图箭头所示的按钮预览效果:
这里先放一个编辑框吧,之后如果有其它的功能需要添加再说,然后是它的属性调整:
Auto VScroll
:auto
为自动,V为垂直(Vertical
),Scroll
为滚动,即自动垂直滚动,就是当你在最后一行按换行后,就会自动行上滚。- 垂直滚动:就是出现右侧的滚动条。
- 多行:很好理解,因为其默认只显示为1行。
- 想要返回:也就是我们按的
Enter
键,用于换行,不将它置为true
,我们就无法换行。 ID
:控件识别名,相当于我们的身份证,用于识别控件的。
然后为它绑定一个控件变量:
自此,控件方面暂时就这样了,后面到了有需要的地方,我们再一步一步添加。
然后我们还需要添加消息,即我们得监听U盘的插入与拔出等消息。
但如果你在网上搜:MFC U盘消息
会发现基本大部分文章内容都是需要提前注册设备号,但我们是U盘小偷啊,怎么可能提前知道设备号?
所以这种方法行不通,即MFC没有处理陌生设备消息的能力,那就没办法了,只能我们自己在比较原始的回调函数中处理U盘消息了。
回调函数不会不记得了吧?在windows编程入门章节详解介绍过,就是用于处理各种消息的。
当然,它也只是稍微原始一点,因为windows
消息的回调函数也是已经被MFC封装过了,我们只需要用类向导,自动生成虚函数来处理即可:
生成之后我们就能看到:
这个函数的参数与最原始的消息回调函数是不是特别相似!只是将第一个参数封装了而已,原始的回调函数如下:
对于我们不需要处理的消息,都通过调用基类的函数进行默认处理,自此前置工作我们就做完了!
3.U盘消息
上述步骤主要作用是接收消息,我们想要接收的消息是U盘消息。
但这个回调函数会收到所有的窗口消息,所以我们还需要通过回调函数的第一个参数来判断是否为U盘消息。
因此我们需要知道U盘消息是什么,U盘只是设备的一种,更加统一的叫法其实是设备管理消息。
所有的Windows消息都可以在官方文档中找到:windows消息。
我们主要在意的是最后一个项目,即窗口消息(WM
:windows message):
窗口消息里面也有很多种类的消息,我们现在需要的是U盘消息,即设备管理消息(Device Management Messages)。
点进去我们就能看到消息的名称:
所以代码中我们就可以这样写: