00:00
嗯,啥动静。呃,今天呢,咱们主要来讲一下这个消息啊,然后来简单的实现一个按钮的功能啊,我们上节课呢,实现的这个东西呢,就是一个什么呢?一个简单的窗口程序啊,我们运行一下,回忆一下啊,就这么一个简单的窗口程序啊,那今天呢,我们的目的呢,就是在它上边啊,给它实现一个什么呢?实现一个这个按钮,然后来简单介绍一下消息的概念啊,我们这整个窗口呢,上节课虽然说我们已经会写了,但是呢,对于消息的这个概念呢,我们可能不是特别清晰啊,那我们首先呢,我们来看一下这部分啊,这部分呢,就是我们整个程序的一个消息循环啊,那消息循环是什么意思呢?就是我们的这个整个程序啊,在运行的过程中,它这个循环呢,是一直在这个执行的啊,然后呢,你在这个运行的过程中啊,也不断的产生消息,然后呢,不断的被获取到啊,然后不断的被处理掉,那你的消息呢,是形成一个叫做消息队列的一个东西的啊,然后取出一个啊来这个进行分发执行。
01:02
取出一个进行分发执行,那这个部分呢,就是获取这个消息和这个分发消息的一个过程,那么分发之后消息去哪了呢?我们这边呢,有一个函数啊,有一个函数在这儿,它呢就是用来做这个消息处理的啊,你可以看到我们这里呢有四个参数,这个四个参数呢,实际上和我们在这边分发的这个消息的这个结构很类似啊,我们这个消息的结构是一个叫做MS的一个结构啊,我们可以直接来看一下这个结构。MG。嗯,不行啊,我直接搜一下吧,MSC啊,然后是这个MSDN。这不科学啊,那我来用那什么吧。谷歌一下,好,现在呢,我们就收到了啊,这个结构啊,还是谷歌好死啊,我们看一下这个结构的它的一个内容啊,它这个里边有几个成员啊,我们翻译一下啊,它这个就是结构体的一个原型啊,这就类似于我们汇编的一个结构体,它是用一个呃西元结构体啊,C加加结构体的一个形式啊来给它展示出来的,那首先呢,它有几个成员啊,这个我们常用的成员呢,其实就那么几个啊,那这个是什么呢?这个是你这个消息啊的一个窗口句柄啊,这个呢是你消息的一个消息码,这个两个呢是你两个参数啊,两个参数都是32位的,然后组合起来之后呢,就是一个64位的一个参数啊,当然一般情况下呢,都是分着用的,接下来呢,是你这个消息发出的一个时间啊,然后这个呢,是你消息发出的时候鼠标的一个位置啊,最后一个参数是什么东西,嗯,不知道啊好,那这个呢,就是一个消息的一个结构啊,它这个发音很搞笑啊,叫未经结构啊好,然后呢,我们来这个知道了这个。
02:56
结构之后,它这是一个消息,那你看它这个东西就很眼熟了啊,首先是一个窗口啊,窗口句柄,然后一个消息啊,两个参数啊,那可以看到,其实呢,就是我们的这个消息结构的前四项啊,后边这三个呢,因为我们用不到它就没有列出来啊,那么我们知道这个东西之后呢,我们可以来看一下什么呢?看一下这个底下的这个部分啊,首先呢,我们在这儿呢,是把这个消息的一个消息号呢,放到了我们的e as里,然后呢,通过几个为指令啊判分别判断啊,我们的as是不是这个e as是不是这个啊,那是什意思呢?如果E是这个WP啊,那就是什么意思呢?就是我们是一个制消息啊,你要绘制你的窗口,比如说你那个窗口移动了啊,那就要在一个新的位置上进行一个绘制,那我们如果说是这个窗口关闭了,那就是什么呢?就是这个WM,这个close啊,那这个close是什么的呢?比如说你可以看到这里啊,这两个是什么呢?实际上就是把这个窗口给毁,然后呢,发送一个退出的消息。
03:56
那这个消息呢,会使你的线程啊进行退出啊,然后呢,你这个整个程序就退出了啊,这是退出,那么我们在这个实现的过程中呢,实际上是有可以有这个不同的消息的啊,你可以有系统提供给你的消息啊,也可以有这个自己自定义的一些消息啊,然后呢,我们可以来看一下它这个Windows的一个消息的一个机制啊,首先呢,这个消息这个机制呢,它翻译的比较这个反人类啊,因为是这个机器翻译的啊,然后呢,我们来看啊,这个底下这个部分啊,我们比如说这是有什么Windows啊窗口列啊过程啊,那我们主要看到呢,是消息的一个消息和这个双消息队列啊,你可以看到有这么多的函数呢,都是对这个消息啊进行一个处理的,那我们一般情况下呢,想要把这个消息发送出去呢,我们用的是什么呢?这个啊send这个和这个什么呢,这有一个这个啊,他们呢是可以干嘛呢,可以发送一个消息啊,那它这个函数里边它的参数呢,比如说我们send举例啊,你可以看到它是什么呢。
04:56
四个参数啊,分别就是我们那四个啊四个四个这个参数啊,一个句柄,一个消息两个参数啊,还有我们的消息循环这个处理函数是一样的,也就是说呢,我们当我们的send message发出一个消息出去的时候啊,它就到了我们什么呢?到了我们的消息消息的一个呃,消息循环里啊进行分发,分发之后呢,就到了我们的这个消息的一个处理函数里,然后呢,我们这个消息这个send message呢,通过它发出来的时候,有这么四个参数啊,那窗口句柄呢,决定了他要发给谁,那么我们的这个第二个参数message呢,就决定啊,你到底是一个什么消息啊,你看这是一个,比如说它是一个绘制消息,一个这个close消息,它还可以有其他的一些消息啊,在我们后续啊都会学到,然后剩下两个呢,就是参数啊,用来这个判断一些事情啊,那你这个是主动发送啊,那你在这个呃,你的程序运行的过程中呢,有很多被动这个消息啊,比如说你按钮按下去之后,它会自动给你发一个消息出去啊,然后呢,或者说你有一些这个其他的一些操作,它也会产生。
05:56
一些消息啊,它是在这个不断的消息循环中啊,进行这个运行的,那我比如说我现在呢,要给它这个创建一个按钮,或者说什么东西啊,然后来发送一个消息啊,我们来看一下它是一个什么样的一个效果,那首先呢,如果我们现在呢,想要一个创建一个这个按钮,那我们应该怎么做呢?首先这边呢,大家可以看到有一些这个红啊,那么比如说我们M一看一下这个东西啊,我们搜一下啊,我们搜一下这个东西啊WM啊。
06:27
这是IDE文档啊,我们直接去那个什么文档上看一下啊,嗯,然后MSDN啊。你看这是一个消息啊,然后他这个消息呢,有很多很多啊,然后在这边呢,也给你那个做一些这个列举啊,比如说我现在翻译一下啊,他这个是呃,绘画和绘图的一个消息啊,然后他这些消息呢,还有还有很多其他的啊,我看一下啊,我们能不能找到那些他的这个声明啊,我先退出来,然后。MESSAGER。
07:04
我搜一下。消息啊,这个消息好像是没有具体的一个,嗯,应应该是有一个具体的列表的,但是我没有具体的看到在哪这个消息消息列表,消息的一个引用消息结构啊,消息常量,消息常量。里边看一下有没有啊。这是user的一个消息啊,那这个消息我没看到它在哪儿啊,那我就给大家简单来说一下,就是这些消息呢,实际上有非常多种的,比如这个绘制啊,这关闭啊,那我们现在呢,如果要这个啊,比如说我是在它的这个刚创建的时候啊,想要创建一个按钮在我的这个界面上,因为我们现在运行起来它是这个状态的嘛,它是一个空白的嘛,那我在它刚创建的时候,肯定是想要把这个画界面的上的按钮直接画在这儿的,对不对啊,我不可能等它运行一会儿之后,忽然冒出来一个按钮啊,那我现在呢,就要干嘛呢,我就要直接来这个处理它的这个创建的时候的一个事件,那这个事件呢,我们再用一个else if啊E等于等于什么呢?等于等于我们的这个啊,WM啊WM啊create啊wm create这个呢,就是我们创建的时候产生的消息啊,然后产生完消息之后呢,我们就在里边可以对它进行一个绘制的这么一个操作,那么我们绘制的操作我们怎么去做它呢?首先呢,我们回。
08:35
到我们的主窗口上啊,我们这个主窗口呢,大家可以看到在注册完窗口类之后呢,我们实际上是使用了一个叫做create啊window ex的一个函数啊来进行创建,那我们来简单的看一下这个函数的一个说明啊,一个说明我们可以看到啊,它的参数呢,相对而言还是比较多的啊,那我们来看一下它每个参数的意义啊,那首先第一个style啊,这个呢,就是我们正在创建窗口的一个扩展样式啊,这个呢有一些其他的样式的一个列表,我们就不细看了啊,正常情况下呢,我们把这个窗口的一个这个属性的扩展样式呢,设置成now就可以了,然后呢,第二个呢是一个类名啊,这个类名就很重要了啊,由这个我们前面注册的这个类啊,或者说其他的类的函数啊,创建的以now结尾的字符串啊,那什么意思呢?就是如果说我们像上节课一样啊,我们自己创建了一个窗口类,那么这个时候啊,我们就把这个类名放在这儿,然后呢,他就按照窗口类啊给它这个进行创建了,但是如果说我们想要创建一个按钮,那这个。
09:35
的时候,我们就调用系统已经给你初始化好的这个类就行了,因为呢,我们的这个窗口啊,里边呢,有一个类名叫什么呢?叫做button啊,就是我们的按钮类啊,所以说呢,一会儿呢,我们在创建的时候,你只要把它的这个类名设置成button啊,你就可以直接创建,创建出一个按钮了,当然了按钮来说呢,它也是有很多种的,比如说单选框多选框啊,普通的按压式按钮等等等等啊,都是可以用的啊,那么这个呢,就是决定了我们这个是什么东西啊,那我们是按一个按钮出来按钮之后呢,我们接下来呢往下看啊,这呢是一个什么意思呢?是窗口的一个名称,比如说我现在此时此刻我有一个按钮,那我按钮上面写的是什么样的一个文字啊,就是由这个参数来决定的,那这个文字文字,比如说我写一个是这个打开,那它就是一个打开按钮啊,如果说关闭它就是一个关闭按钮,它就是类似的一个作用啊,然后接下来呢,是这个证件创建的窗口的一个窗口样式啊,这个样式呢,你可以看到这有一个窗口。
10:35
它是值的这么一个,呃,扩展啊,那你可以从这里边去找你想要的东西啊,他这个后边呢,也会告诉你啊,里边呢会怎么样啊怎么样,它是如何去做的,当然这个东西呢,是你是可以使用一个or来给它进行一个这个联合使用的,因为你可以看到它这里边实际上每一个都是一个占,占一个位啊,占一个位啊,所以说呢,你实际上而言是可以啊用一个偶来这个体现这个东西的,然后呢,我们除了这个东西之外呢,我们还有什么呢?还有我们的位置啊,这个位置呢,一共有四个东西啊,那个其实不是位置,应该说大小和位置啊,你可以看到,首先这儿呢有一个X啊,那这个X呢,就是什么呢?就是我们窗口的初始水平位置,那这个初始水平位置呢,其实是这个相对于什么呢?是其实相对于我们的副窗口的,比如说我现在的这个窗口上如果有一个按钮,那么它这个按钮设置的这个值实际上是相当于我这个负窗口的这个客户区的啊,然后从这开始计算,比如说我这个位置就是零,零,然后往这斜下角进行。
11:35
延伸啊,进行对线,然后取值啊,然后呢,我们这个Y呢,跟刚才一样啊,刚才那个是X轴啊,它的水平X轴,这底下呢,就是一个水平Y轴啊,然后接下来这个东西你可以看到啊,这个名字非常好啊,就是什么呢?就是宽啊,它其实就是一个宽度啊,这个东西呢,我们就可以给它写一下,你这个按钮想有多宽啊,这个呢,就是你这个按钮有想有这个多高啊,就是这样啊和这样横竖啊,就XY的一个关系,接下来呢,是你正在创建的窗口啊,说以这个需要提供的副窗口啊,然后的一个句柄,然后再下来呢,是我们的一个这个指定的指窗口的一个标志符啊,这个标志符也是需要用到的,接下来呢,是创与窗口相关联的一个实例句柄,这个实例句柄呢,我们在我们上一节课进行创建窗口的时候,实际上就已经初始化出来了,所以说呢,我们一会儿在用的时候呢,直接对它使用就行了,不用再二次初始化,然后最后呢,它带一个参数,但是基本上我们使用Windows给我们提供的控件的时候。
12:35
我们是不需要这些东西的,然后呢,我们现在呢,就来看一下这个Windows的一些控件的相关知识啊,我们首先打开它的Windows控件的一个文档啊,你可以看到啊,这里边呢,有很多很多的东西啊,然后呢,我们这儿有一些关于常用控件的一些东西,比如说啊,这个创建通用控件啊,是如何去做的啊,比如说你这有什么这个按钮类型啊,还有什么其他的呀啊,你看这写的啊,最常见的控件属于公共控件D中定义的窗口类啊,然后呢,他们通常情况下呢,是在我们的这个动态链接库里的,然后呢,我们可以通过什么呢?可以通过create window ex窗口啊来这个创建我们的通用控件,比如说按钮啊,或者说其他的一些东西,那比如说我如果说我现在呢,是一个这个按钮控件啊,这有一些控制消息啊,也可以简单看一下啊,然后主要是什么呢?我们看一下我们的这个按钮控件,这是控件库,这就是我们可以使用的控件啊,之后呢,我们都会学到,那么我比如说我们这控件库里呢,有我们的。
13:35
画啊,有这个什么,呃,Combo box啊,然后还有什么这个编辑件啊,什么滚动条啊,热键啊,还有这个IP列表啊,这个什么,还有什用树状图啊,工具栏啊这类东西啊,它都是有的,然后我们这节课呢,以一个最简单的这个button啊一个按钮来对大家做一个这个消息上的一个学习,然后呢,我们可以看到它的概数里边有几种,就是什么呢?首先是一个消息按钮的一个消息啊,然后呢是它的状态,然后呢是类型,然后是这个如何使用按钮,那比如说我点一下这个这个按钮的一个消息,你可以看到啊,它在这边呢,就来给你啊,说明了一下消息按钮都有什么样的消息,还有呢,如何将这个消息发送给这个按钮,然后如何去处理它的这个消息啊,那你可以看到啊,它这边呢,按钮中的通知呢,会作为两个东西,一个是这个wm com,一个是WM这个消息啊,进行这个发送啊,然后他他在通知这个参考页上也有这些相关的一个控制。
14:35
消息啊,我们可以点回去看,然后比如说我们如果说当用户单击的某个按钮,它的状态改变了啊,按钮呢,就会以这个消息的形式通知啊,发送到副窗口,也就是说啊,你当你这个界面上如果有一个按键被点击之后,它会发送到你的消息处理里边,然后消息处理呢,会进入到某一个消息里啊,某一个消息里,然后进入到消息之后呢,你就需要啊,来判断它到底是什么样类型的一个,呃按点击,或者说你什么类型的一个这个按键啊,当然了,你可以不判断啊,你可以只要是这个按钮的消息,你就做统一处理啊为什么可以这么做呢?因为你如果是这个这个按钮只有一个点击功能,那其实你无论是其他的怎么样的,只要是这个按钮触发的,你是都需要处理的,对不对啊,所以说你就不要再去判断了,那如果说你这个按钮既有左键点击,又有右键点击啊,又有左键双击,又有右键双击的时候,那么这个时候你的这个呃,功能上是有不同的。
15:35
区别的,那么这个时候你就要区别对待它的每一个消息码,比如说啊,它的底下就有一些通知代码是预制好的啊,你比如说第一个啊,那就是鼠标输入或离开了啊,这个按钮的一个工作区,第二个呢,就是我们啊用户点击了按钮,这个呢就是用户双击的按钮,然后呢,按钮已禁用,按下了,丢失的焦点等等等等啊这些呢,都是他常用的一些这个通知代码,它已经给你列在这儿了,你只需要在你的消息消息的一个处理函数里啊,对他呢,做一个判断就可以了,接下来呢,我们再看底下啊,它还有一些这个按钮的一些颜色啊,这个样式啊之类的东西啊,这个我们就不需要管啊,因为什么呢?因为我们这节课呢,只是想学习一下消息啊,它具体的长得好看不好看其实无所谓,然后底下呢,你可以看到有一些按钮的一个默认的一些消息处理啊,比如说这个什么呃,返回句柄啊,返回什么其他的东西啊档啊,这个down呢,其实就是按键按下去啊,然后up呢,就是比如就是抬起来,比如说这个什么意思呢,就是你键你有键盘嘛,当你。
16:35
键盘啊,按下去的时候啊,其实呢,它就会产生一个WM的一个消息,然后呢,抬起来的时候呢,它就会产生一个什么呢,这个WM这个的一个消息啊,然后其他的呢,也都是一样的啊,比如说这呢有一个绘制啊,这个其实就是我刚才要的那个消息的一个列表啊啊上上面那个不是啊,上面那个BM开头的实际上是这个button message啊,它的BM就是button message啊,按钮消息的意思,这个底下这个W啊WM啊window啊,这个message啊才是我们想要的啊,就是窗口消息啊,那我们正常情况下的窗口消息呢,基本上就是啊,这是少部分啊,其实还有很多一一一些其他的东西啊,然后呢这呢,还有一些这个按钮的一些状态啊,这个我们下节课再讲啊,这节课呢,我们先不管它,我们先来创建我们的这个呃按钮,那首先呢,我在这I if已经等于了这个wm create啊,实际上在这个位置上我们就已经可以创建我们想要的按钮了,那我们刚才也说了,我们需要类似于一个创建窗口的形式来创建它,所以说呢,我现在要比如。
17:35
我要成事的话,我就调用一个这个in work in一个这个create啊window。Ex,然后呢,我现在呢,要给他来这个传递参数啊,那首先第一个参数是扩展啊,我这个是不是写错了,我看一下啊。嗯。啊,这个没问题了,第一个参数啊,我们回来我们来看一下啊,它这有这个说明,首先第一个参数呢,是它扩展的样式啊,这个样式呢,我们可以为now啊,所以说呢,这个我们就直接传一个now就行了,第二个第二个参数是什么呢?第二个参数呢,是它的一个类名,这个类名呢,我们需要给它写成固定的,为什么呢?因为你不写成固定的没法创建它,它的类名呢,是我们Windows已经给你填充好的一个关于按钮的一个这个类名啊,那我们在这呢,我们给它设置成这个常量啊,比如说我给它写一个这个。
18:36
然后我直接一个DB,然后里边的值呢,我们写一个这个button。好,接着呢,我在里边呢,我在写这个类的时候呢,我就可以使用它啊,比如说我现在呢,用一个这个off啊,取一下它的地址,然后呢,传入我的button,好,那这样就行了,我首先呢,我的类名就有了一会初始化的时候啊,我们的Windows操作系统就知道我创建的实际上是一个按钮了,我知道按钮之后呢,下边呢,我就需要知道啊,我这个窗口上是一个什么样的一个标题啊,比如说我这个给它来一个什么呢,来一个。
19:14
好,然后呢,我用off给它取一下啊。好,那这个呢,就是一个name啊,下面我们现在呢,首先呢,我们的一个呃扩展样式啊,一个类名和一个我们的窗口名,我们就有了,接下来呢,我们要传一下这个风格啊,那风格呢,我就啊随便给它实现一下,这呢我们可以用多个啊,那我们就直接用一个over啊,给它进行多个就行了,因为这个实际上是一个呃的一个操作啊。WS。啊,然后呢,咱们的小助理在这个公屏上发出了这个消息啊,如果有需要这个呃,以往的工具源码视频等等的啊,然后需要闲聊的等等,欢迎加入我们的这个群啊,或者连接小助理啊,给你拉进群都是可以的啊这个注意一下公屏上的这个呃,号码好,然后呢,我们给他这个样式啊,填完后呢,我们继续往下看啊,看下边还有什么样式,传完之后呢,我们接下来呢,是两个呃,XY啊,就是我们的水平的一个位置,那这个位置呢,我们可以给它直接顶到头啊,给传一个比如说零零。
20:34
啊,但是这样的肯定是不好看的,我们又在改,那接下来两个参数呢,就是它的宽高啊,比如说我给他传一个这个,呃,一百一百一百个100乘50的啊一个按钮,然后接下来呢,我们下一个啊,就是我们的一个窗口聚柄,一个窗口句柄,那这个窗口句柄呢,我们在进来的时候啊,它四个参数,第一个参数就是我们的窗口句柄,我们直接拿进来啊,然后给它填在这就行了,窗口句柄之后呢,我们再来看一下啊,窗口句柄之后呢,首先呢,是它这个要指定一个子窗口的标志符啊,实际上就是它产生的一个句柄的一个值,那这个东西呢,我们可以给他写死,比如说我呢现在呢,就给它定义一个IDC啊,然后VT to啊,Button啊一,然后我直接一个这个DD啊,我比如说我给它传一个这个12138啊,然后现在呢,我把它拿回来放入到我的这个。
21:26
啊,放入到我的这个参数上啊,这个呢就是它的一个固定值,然后接下来呢,是一个实例句柄,实例句柄呢,在我们上一节课Windows创建的时候,你可以看到我们通过了一个get,这get这个model handle啊来这个获取到了啊,它实际上就是EE的一个模块机址,然后获取到之后呢,我们通过ES把这个返回值放到了我们的实例句柄里,那么我们既然已经获取过了,我在这儿呢,我们就可以直接使用的,因为这个实例句柄实际上是我们定义在IC的一个这个未初始化的一个数据区里的,所以说呢,它实际上相当于是一个什么呢?全局变量啊,就是说在这个任何位置都是可以使用它的,那么在这边呢,我们就可以直接使用它,我们直接啊把它呢放在参数里啊,就可以使用了啊,但是我这参数都写错地方了啊啊这从零开始啊,我都写错地方了啊,我这是要放在这儿了,刚才看错行了,然后呢,我这个放完实例句柄之后呢,我下一个参数是什么呢?我们来看一下啊,实例句柄之后,下一个参数你可以看到是一个什么呢?是一个参数啊这个参数呢,我们就不需要了啊,它指向。
22:27
上了一个这个Korea的这个star这个什么啊,这个这个启动结构啊,创建结构啊,我们这个就不需要了,我们再传一个now给他就行了,好,那现在呢,我们这个东西呢,实际上就已经创建完了啊,我们现在呢,简单的可以看来来看一下这个效果,我们重新生成一下这个本项目。重新完事之后呢,它有一个失败啊,这个位置上他这个啊,我写成DN了啊,这是DB啊。我们重新生成。嗯,然后这儿还有多了一个点,说是我看这个点在哪啊。
23:01
啊,这是两个点啊,去掉一个。重新生成。好,成功了,成功之后我们运行。运行之后啊,你可以看到它出多了一个长得很诡异的一个按钮啊,那这个是零零一百五百啊,那我这个500太长了,我给他传个50啊好,那我们重新生成。出击正常之后啊,我们现在呢,就出现了一个啊,100乘50的一个按钮啊,横向是100,竖向是50啊,然后它点击啊,现在是没有效果的,并且呢,因为我的初始位置啊,是位于我客户机的零零啊,也就是说它你可以看到是顶在头上的啊,看到没?所以说呢,这个就是它的一个水平位置,那么接下来呢,我们如果说需要啊,让他响应一些功能,那么这个时候我们应该怎么办呢?因为你正常情况下,无论是你要做什么开发啊,你写个按钮出来,你不可能让这个按钮毫无功能,对不对,你肯定要去响应它,那么这个呢,就涉及到咱们今天所学习的一个消息的一个知识了,因为你按钮按下去的一瞬间,它会产生不同的消息,比如说单击双击等等啊,那么这些消息呢,都会进入到哪儿呢?都会进入到我们的这个消息循环啊,到消息消息循环里进行分发,分发之后还会进入到这儿啊,那这个时候呢,我们要再给他再进行一个新的啊,新的什么呢?新的那么这些东西它会进入一个叫做WM啊这个。
24:22
M康他曼的这么样的一个消息里边啊,那么进入到这个消息之后呢,你就可以来对大家做一个简要的一个这个操作了啊首先呢,你这个通过它消息的形式啊,到这儿之后啊,你要干什么呢?你要来判断一下啊,是不是你的按钮来产生的消息,那怎么判断呢?就是在按钮的消息产生的时候,它不有两个参数吗?一个W参数,一个参数,你的你的按钮的这个ID啊,你的ID实际上是存储在你的W参数里的,那所以说呢,我们现在呢,就可以通过move move啊ex啊这个W参数的形式啊,把我们里边的值取出来,取了出来之后,我们用这个点if来这个进行一个判断啊,判断什么呢?判断我的EAX是不是等于等于我当初创建我按钮的时候,给我按钮所提供的这个ID啊,这如果说相等了,那那我们就点啊这个N的啊,这个就是我自己创建的一个东西,那我就开始处理内容了。
25:23
比如说我在这啊,调用一个这个in work这个麦子boss。然后啊,窗口句柄啊,我传个道啊,第二个内容我传一个这个吧。OK,好,那现在呢,我给它重新生成一下。我们来运行一下。现在啊,我要点击我这个按钮啊,你可以看到点击之后啊,是不是弹出了一个消息框了啊,那这个就说明什么呢?说明我们在这个点击这个按钮单击的时候,它确实产生了一个消息啊,并且进入到这儿啊,通过判断啊,这是我们自己的东西,自己的按钮,然后呢,直接就进入到这儿了,那你说也许啊,所有按钮都会进行处理呢,比如说我现在呢,把我的这个ID啊,我给它注释掉,我随便换一个这个零,那这种情况下呢,我们运重新运行啊,重新运行。
26:16
我来运行啊,我再点,再次点击我的按钮,你可以看到我的按钮再次点击就没有用了,所以说呢,我们确实是通过判断我们按钮ID的形式,找到了我们自己的钮的一个ID,还需要注意一点是什么呢?我们这种情况下是因为我们的按钮只有一个功能,就是单啊,我们不需要判断它的功能,如果说你需要判断它功能的情况下啊,你还要再判断一下,它到底是通过BM什么消息过来的啊,这个呢,我们之后会讲,这节课呢,我们先不理它,我们这节课的重要重点是消息啊,我们先把消息捋一下,那首先我们直接进入到这个按钮消息里边之后我谈一个窗,实际上是没什么问题的啊,这个非常简单易懂啊,我自己的按钮嘛,我直接进入到我自己这边处理啊,然后弹一个框嘛,那比如说啊,我们如果说是一个自定义的消息啊,那去怎么样呢?比如说我如果按下按这个按钮,就会产生一个自定义的消息,那这个自定义的消息是什么呢?比如说我在这个里,我来给他来一个这个。
27:17
啊,比如说我is什么呢?Is if e等于等于12,这个12没有任何意义啊,它就是一个立即数啊,就是一个整数啊,你可以是12,也可以是18,无所谓,反正呢,你把它放在这儿啊,然后一会儿我们要用到它,那我们刚才也说了,我们是可以发送消息的啊,那我们发送消息用什么呢?用的是这个send magic啊send magic我看一下这个函数刚才放在哪了,嗯,忘了啊,反正呢,我们是用一个send magic,那我们现在呢,就要来用这个函数了啊,要用这个函数的,那我们现在呢,怎么写呢?比如说我这个按钮,我按完之后,我不调用magic,我调用什么呢?我work一个send啊send magic啊,这样是不是也行?那么send message它一共四个参数嘛,第一个参数是你窗口的一个句柄啊,那我直接把窗口句柄啊传过来,然后呢,我第二个参数什么呢?是你的消息啊,那消息呢,实际上就是一个数字啊,一个码,那我现在如果想要把这个消息发送到我这个12里边,那我是不是直接在里边选。
28:17
输入一个12就行了,对,确实是这样啊,确实你输入一个12就行了,接下来再然后呢,比如说我这个12里边我第三个啊,我这有一个参数啊,有一个参数,比如说这个参数是个什么东西啊,那这个参数我们也给它加进去啊,也给它加进去,但是我们这儿呢,就不需要嘛,那不需要我就给他传一个,就比如说随便传一个传个12,或者说传个零啊都行啊,那这个时候我消息就可以发出去了,那发出去之后呢,它响应的消息呢,就是这个12啊,那比如说我把我的my box啊,我给他转移到我12里来进行执行。那也就是说呢,它现在的执行逻辑是你点击按钮按钮之后呢,它会触发一个,然后再去执行进行一个弹出,那首先呢,我们现在呢,运行一下啊,来看一下是不是我们想要的一个结果,那我们重新运行之后呢,我们来运行,那重新生成以后,我们来运行,我们点击,诶你看正常弹出了,但是你可能就说啊,这是不是直接去执行这了啊,那我们这儿呢,就可以下一个断点,对不对,我们在这come的这儿啊,我们下一个断点,然后我们再次运行,运行之后啊,我现在呢,我要让他继续啊,然后呢,我点击一下这个按钮,诶诶我等一下啊,这个没有重新生成啊,没有重新生成,我先重生成一下。
29:34
运行啊,然后进行。卡住了啊。继续。然后我点击,诶,这怎么回事啊。我看一下啊,我这怎么直接弹出没断下来呢。嗯,翻车翻得太快,就像龙卷风。
30:03
等于12啊,我把12这的啊,我给它注释掉啊,我们重新试一下。成功啊,然后运行我们啊,这点断住了啊,然后我们点击。啊,他确实没有了啊,他确实发送消息过去的啊,但是不知道为什么啊,我们在这儿给他下个断点吧,啊,他可能断点的位置不是特别正常啊,我们重新生成一下。然后我们运行。点击诶这回就对了啊,他没有过直接过去啊,他刚才这个断点没有拦住他啊,我们现在呢,在这个位置上我们已经断下来了,然后断下来之后,我们首先啊走走完之后啊,判断一下是不是不是我们自己的啊,你可以看到我们的EA现在是2F6A,那2F6A呢,我们可以通过这个计算器来计算一下啊,2F6A啊,你可以看到就是12138,其实呢,就是我们刚才定义的按钮的一个button的一个ID,然后现在呢,我们判断之后是我们自己的按钮,那么这个位置上我们通过work send message啊,就要把这个消息发出去了,那它消息码是12啊,所以说呢,我们现在F10,诶你看它就到12这了,对不对,然后呢,它就会去执行这个啊好,那这个就没有问题了,那比如说我们这个啊,我们其实还有一个另外一个函数叫做啊,那这两个的一个区别是什么呢?就是我们的呢,它的这个效果是你把一个消息发送给某一个窗口。
31:38
窗口执行完这个消息的内容之后再返回,而push是你把一个消息发送到一个窗口,发送完就完了啊,这个是他们俩的一个区别啊,就是和这个之间的一个区别,其他效果并没有什么实际上的区别,但是注意他们俩接收处理的函数不太一样啊,这个我们在之后会讲到这节课呢,你先知道啊,我们的send message是可以自定义消息啊,然后发出去的啊,正常情况下啊,我们用户用的消息啊,就是我们自己定义的自定义消息,最好不要使用12这种消息啊,我们正常情况下我们那个消息是什么呢?从800开始啊,从800开始啊,然后往上加啊,比如说我定一个这个user啊,User message,然后我定一个800啊,那你第一个自定义消息,一般情况下,你给他定义一个这个801啊就可以了,那这个12这种的,你很容易和这个系统的一些消息啊,这个就是你窗口的一个正常的消息进行。
32:38
一个混淆啊,这样就不好了啊,这个就是需要注意的点啊,好,那么我们今天呢啊,就写的差不多了啊,就是把这个我们的一个消息啊,简单的给大家介绍了一下,然后呢,参考资料呢,就是我们的这个Windows上的这个文档啊,Windows上的一个文档。大家可以对这个文档呢,仔细的来观察一下啊,比如说这个send message啊,它这个里边这个消息啊都是什么东西,那我们这节课呢,只用到了这个send message的这个第二个参数啊,就是我们这个啊带一个码过去,然后激活指定的这个消息分支,那么之后呢,我们还会在里边带参数啊,就是两个参数我们都会使用啊,然后呢,来进行参数上的处理啊,那这节课呢,我们就讲这么多,下节课呢,我们还有什么内容呢?就是我们的窗口里啊,能容纳的这个按钮类型啊,远远不止这种一种普通的点击式的啊,还有很多很多的其他的处理啊,都是需要的,就是说我们的按钮呢,实际上还有很多很多的功能啊,那明天呢,我们就讲按钮的这些功能啊,那今天呢,我们就到这儿了啊,如果有什么问题,你们现在呢就开始问啊,如果没有问题呢,我就停止录播,然后找咱们助理回来。
33:58
嗯,马上啊,他们没有问题。
我来说两句