1.2编写窗口截图 本次选择窗口截图一共3步:鼠标按下、移动、弹起。 知识点:改变鼠标图标、截图函数封装、窗口画图 本节新学习AIP: LoadCursor SetCursor(m_hCursor); SetCapture(); CreateDC CreateCompatibleDC CreateCompatibleBitmap ClientToScreen WindowFromPoint CreateSolidBrush FrameRect …………………………………..
视频观看地址:
https://www.bilibili.com/video/av30091327/
视频语录:
大家好,我是Simon。
今天晚上我们开始来讲第二课,我们的第二个的话是开始编写一个窗口截图的一个功能,那么我这里就是列了他三步窗口截图,然后分别鼠标按下,然后是移动和弹起。
这里的话就是我们要学到的东西就是鼠标我们就是鼠标按下以后,在移动的过程中,我们去改变鼠标的一个图标。
第二个的话就是我们截图函数的一个封装。
第三的话就是窗口画图,就是说我们去选中哪一个窗口,然后我们用一个矩形框来将它显示出来,
我们学到的一个新的API有以下这些。
我们在具体代码编写中来熟悉这一些API的一个应用,那么这个文档的话我没有去详细做,我们一起在具体的一个程序设计中,我们来学这些函数怎么去用。
至于文档的话,到后期我如果有需要的话,给大家补一下,那么我们现在就开始打开我们上一节课的一个源码
内容比较多,估计这一节课我们可能讲不完。
这是我们上一节课讲的一个程序,这里的话我们应该再把它给销毁一下,用完以后我们记得销毁。上次保存图片的话是可以保存多种图片的,那么我们之前在帮助文档里面也看到过,那么大家自己去测试一下,首先我们这里看了一下三步,我们这里就先做鼠标按下的动作,那么鼠标按下的话,我们先添加一个按下去的一个消息,这个是点击按下鼠标按下。
先这样,我们先看在这个系统系统里面的工具,它这个是一个怎样的东西,我们是窗口截图,新建一个窗口截图。他这个点窗口截图的时候新建。可以看到它,这就选到我们一个全屏了,不过大家有没有看到有一个红色的边框,是选到了我们的全屏。我不知道这个是不是跟我们现在录像工具有冲突还是怎么回事,反正这里就是他应该是已经截到了。
好吧,我们还是来进入主题,鼠标按下按下以后,我们是说要这也是说要改变我们的一个改变我们鼠标形状。改变鼠标的话,我们是用这一个函数,这个函数是加载一个资源文件,我们先看一下帮助,
稍等一下。好,它这个的话是它是加载一个指定的一个资源文件,光标资源文件。
这里我看的也很辛苦,然后用这个翻译的话总是感觉很纠结,我们试一下去百度里面,这样吧,直接从百度去找可执行中指定的光标资源,然后这里是返回模块型,我们这里定义。
这个的话我看一下,我们直接用mfc父类,我们用去加载它,然后我们这里添加一个光标资源文件,那么这里的话我没有事先去准备,我们直接就用一个系统的一个资源文件,用一个指针的一个东西,这样一个图标。
就是说当我们鼠标按下去以后,它我们的鼠标形状就会变成这样子。这个编译一下这里。我们加载好以后,我们开始来设置它,这是我们刚才设置它设置完以后,我们要把这个消息接过来我们来查一下这个函数的功能,它是说当前线程指定窗口里设置鼠标,这个的话大家自己看一下。
我们这里设置完以后,这样的话我们可以这样我们可以去测试一下,我们先注册一下,看看我们的效果。然后我们是运行起来,就是说我的鼠标在这个窗口上面,然后点下去的时候,可以看到我的鼠标在左键点下去以后,它是没有任何变化的。
然后我们现在的话就是让他改变一下,然后让他直接变成一个指针,看看它是否有变化,我手表点。可以看到我们的鼠标已经改变了。改变了。但是可以看到我们就是点下去以后,鼠标弹起来,我们没有做动作,就是说我们没有释放资源为释放,所以我们的鼠标这个图形就一直没有释放掉。
然后就一直在按下过程中,然后我们这是一个程序就已经死掉了,然后看一下。这里设置完以后,设置完以后的话,我们肯定是要去释放掉它,我们再添加一个消息。也就是说它是鼠标谈起的消息,鼠标谈起以后,我们是要去将它进行一个示范。
将资源释放掉。这样的话我们的消息的话就到马上下去以后谈起就会把那个消息给示范。可以看到我们的鼠标已经改变。
弹起我们鼠标又回来,原来的一个形状,那么这个功能实现以后。
我们就开始对我们一个截图函数的一个封装。
这个函数的话,我们是写到鼠标移动的消息里面!光标移动的话,我们设计一个。
这样我们先判断一下,好吧?我们在这里的话添加一个变量,我们是用私有的布尔类型,然后我们来判断一下,然后判断它是否是截屏,然后我们开始来处理,那么我们这里的话按下以后我们在这里对变量进行判断一下。如果这里是的话,我们就对他进行截屏。截屏的话,我们设计一个函数,然后就叫做窗口截图好吧?
设计这样一个函数。那么我们这个函数的话,不要返回值了。参数我看一下截图。参数的话,我们这里一个传个指针进去,我们这里是在移动处理,对,我们把鼠标的一个位置给过传进去。对,我们就这样。
这里的话是把它的这一个。这里是在移动处理移动这里,对,我们把鼠标的一个位置给过传进去,对。我们就这样。这里的话是把它的这一个自己也闯进来能编译一下。然后就是这一个函数的一个编写了。我们这里的话传进来,传进我们的指针以后,然后我们将它进行一下转换,用函数这个函数的话,它是进行一个查一下,我们还是来看一下咱们百科怎么讲吧。可以看,他是把一个客户区的一个坐标转换到一个屏幕坐标,也就是说把它转化成整个屏幕坐标,屏幕坐标的话是从左上角开始,零零的位置,开始。算了。这里的话我们直接就进行转换一下,然后我们再得到一个鼠标位置的一个窗口句柄,然后我们看一下它返回,返回的就是一个句柄,然后这里我们再添加一个距离,句柄的话就用一个鼠标的一个居民。这里我们再添加一个区别一个看一下。然后我们在再对它进行一个判断。判断我们再看一下,做一个判断的话,就是说我们这个函数,我们的鼠标在随时的移动移动,我们会去不停地调用这个函数,然后我们这里的话要判断一下,看到我们这个句柄是不是为空?如果是为空,我们就继续往下来进行一个绘图。如果它不为空的话,就那说明他这个是已经在执行了,也就是说我们选定了一个目标在进行一个画图,那么我们就直接返回判断的话,我们是用这样我们这里再定义一个函数定义一个变量,变量的话还是一个句柄。我们添加一个这样的函数,然后等于它的话我们就直接返回,再或者的话它是等于自身或者是说我们的一个。直接返回,这个的话就是把它付给他。这一段话的意思就是说他对自身的话不不,截图请我们编一下。
那么这一节课的时间的话也差不多了,那么前面讲的这些大家到时候在看一看,后面这个函数的话是具体的一个设计的话,我们还是到后面再进行一个下节课我们再开始编写了这里。
看一下我们到这里来把给做一下初始化变量初始化我们要去养成一个好的习惯,好,那么这节课我们就讲到这里,那么主要就实现了一个鼠标按下移动谈起,实现了这三个消息的一个功能。
那么下一节课的话,我们在对一个截图函数来进行一个编写。
好,那么这节课我们就到这里,大家再见。
原文地址:https://www.cnblogs.com/simont/p/9523076.html