00:00
啊,然后我录一下,今天呢,咱们讲一下啊,怎么用汇编写一个窗口程序啊,咱们这个前面的这个模板基本上就是写的都是控制台程序,那么这节课呢,我们来在这个基础上,我们来写一个这个窗口程序啊,其实就是一个SDK,那我们呢来看一下啊,这个如果是用C语言写SDK,它长什么样啊。电音有吗?我们新建一个项目啊。在这儿啊,然后我们选择一下问这个桌面程序,我们直接确定啊,就看一下它模板啊,不需要配置任何东西。这个窗口程序呢,它大概呢,就包含几个部分啊,你像是这个这是下加代码写的,那我们最主要的呢,就是要有一个这个文妹啊文妹函数就是其实就是主函数,那主函数里边呢,比较重要的什么呢?就是这个消息循环啊,消息循环它呢是有外边有这个消息进来,然后由这个消息循环获取到消息,然后呢进行派发,那这个是一个比较重要的点,还有重要点是什么呢?就是它里边有一个这个处理函数啊主函数啊,相当于那我看一下啊,它这个类在哪注册的啊,嗯,这是模板,模板的类应该是在这儿呢啊,我的什么MY注册类啊,这个啊,咱们F12进去看一下,你可以看到这有一个窗口的一个类,其实就是窗口的一些相关信息,一会儿咱们写的时候再具体给大家介绍都是什么意思啊,这呢注册了一个类啊,注册这个类里边呢,它里边有一个指定的一个东西啊,就是我们的一个这个处理函数啊,然后应该是。
01:35
嗯,不对,这应该是类名啊,这是类名,嗯,它的主处理函数我看一下啊,在这儿呢啊,这个w ndp RO OC啊,这是一个函数啊,然后呢,这个理函数主要是什么?就是把那个消息啊甩过来之后啊,你可以看到这有个参数,就是这个第一个是一个口,第二后边两个参数啊然后呢,这个message呢,在这儿啊做一个分发,比如说它是一个wm command就来这边啊做一些事情,比如说他一些是about,这个消息就弹出一个about的窗口,然后如果退出消息呢,就是发在这个发一个退出的消息,然后这边呢是绘制啊绘制,然后呢,这个是开始绘制,这是结束绘制啊,这是一个绘制的结构,这是DC啊啊就是一个相关的一个,应该说绘绘图相关的一个这个聚柄啊,然后这边呢,是一个这个出用的这个消息啊,然后底下这是默进行一个窗口的一个默认分发,那这三个呢,就是咱们最主要要实现的东西,那么咱们这节课呢,就是用汇编啊来把这些东西实现出来。
02:36
呃,其实西原写呢不难啊,但是会编写呢,相对而言还是稍微有那么一点点复杂的啊,那首先呢,我们来这个定义一些东西啊,首先我们在这节课呢,要多给它包含一个头文件啊,我已经拷贝进去了啊,在这直接包就行啊,就是我在include里啊,我又弄出来一个什么呢,叫做这个g di32.inc然后呢,这个B库呢,你肯定要给也要给他这个带上吧,就是B,然后呢,有一个叫g di32.b的。
03:08
然后我们给它重新生成。可以看到啊,没有问题,那说明我们这包的肯定是没问题,那回来之后呢,我们还要给他定义一些东西啊,比如一些变量,刚才我们看到了,我们有需要一些类似于窗口句柄,还有这个呃,实例句柄之类的东西啊,我们先给它定义一下啊,比如说我用一个未说化的这个数据段啊,然后先给它定一个实例句柄。它就是一个四字节,然后呢,我们不初始化,然后接下来呢,我们需要一个窗口的一个句柄啊,也不算窗口句柄吧,文妹啊,然后DD啊,这是两个,然后呢,我们还需要一些啊啊这个我没用过啊,但是我们这节课用一下常用的,我们主要说需要什么呢?一个是我们的这个窗口,一会有一个窗口的一个类啊,一个类,或者说你理理解成一个窗口结构也行啊,因为咱们如果你没学过下加,你可能不太理解类是什么,但是咱们学过结构体的对不对啊,那这个呢,你可以理解为一个结构,然后呢,你需要一个结构名或者说类名,然后呢,还需要什么呢?还需要你一个窗口的一个窗口标题,就比如说我这个studio,你看它左上角有一个这个呃的这个64,然后microof这个visual studio这个就是标题啊,那一会儿我们也要一个标题,还有呢,就是我们一会儿呢,在这个窗口上,我们要输出一句话啊,证明一下,我们给他这个进行了操作啊,当然你不输出这句话也无所谓啊,但是我。
04:36
我们要给它简单写一下,首先呢,我要给他设置一个这个类名啊,Class name啊,然后呢,一个DB my my class啊,然后逗号零啊可以了,然后这就是我的类名,然后呢,我再设置一个标题。呃,随随随便起啊,这都是随便起的一个东西啊,就是这个my window啊,都洗的比较随性啊,无所谓啊,能用就行,然后最后呢,你比如说你要这个说出一句话啊,那你比如说这个test,然后DB给他写一个这个。
05:23
Win,哎呀WIN32SDK啊,这个window好啊,虽然说也不知道什么鬼啊,但我们就这么写了,我们然后我们给它重新生成一下啊,看一下这个定义应该是没有问题的啊。啊,可以看到成功了,成功之后呢,我们现在呢,就来开始写我们这边的这个代码,那你这个代码呢,首先呢,我们在这个主函数里,就是没函数里边啊,我们其实需要的东西不多啊,我们现在呢,只需要在这个位置上啊,写一个这个啊主函数我们给它拷过去就行了啊,甚甚至我们直接把这个may当做这个主函数也不是不行啊,也可以啊,也可以啊,但是我建议呢,你还是要给他证明一个别的函数在这个里调用,因为什么呢?因为我们可能需要一些变量啊,比如说我们现在呢,需要一个这个。
06:13
然后PC啊,PC之后呢,我现在呢,需要定义一些局部变量啊,就是在它的生命周期只在函数内部,如果出了函数就直接失效的那种变量啊,那这种变量怎么定义呢?它一般情况下呢,使用了一个叫做这个local啊,Local的这个关键字啊,为为指令来进行定义,然后后边呢,我们直接啊给它开始定义啊,一个艾,这个艾开头啊,比如说我们现在定义一个类。那现在呢,这个类呢,它这个它现在呢,这是它的名字啊,那它类型是什么呢?类型呢,我们就要给它定义成这个窗口类的类型啊,这个东西呢,在我们的windows.inc里是有定义的,所以说我们直接用就行了,W nd class啊,然后ex啊,这个东西呢,我们可以直接通过我们的百度了解一下它的结构里头都有什么,嗯,我们现在呢,打开百度,然后输入这个WND,哎,我没复制上啊,ND啊,Class ex啊,这个就是一个成员啊,那我们来看一下他这个MSDN的介绍啊,其他东西比较乱啊,MSDN。
07:18
啊,这个到会对它的这个成员一一进行填充,填充的时候来介绍它是什么,现在我们只知道,只要知道啊,它是一个结构体就行了,好,那这个第一个啊,我们定义好了,定义好了之后呢,我们还需要一个东西啊,就是我们的一个消息啊,我们的这个WIN32啊,也就是我们的Windows上啊这种原生的这种啊,用这个API来写的这种窗口啊,它这个消息机制呢,是比较这个容易观看的,如果说你是后边,比如说你学习MC啦,QT啦,用那种这个消息循环啊,什么信号和槽啊,它的封装呢,稍微厉害一点啊,所以说你在学习这个SDK的时候,最好去理解一下它的这个消息循环是如何做的,那现在呢,我们先给定义一个消息的一个结构,我们还是使用一个这个local的一个关键字,Local的关键字,然后呢,我们给它定义一个名字啊,比如说这个ST啊,因为它是结构嘛,然后呢,STMS。
08:18
就叫。嗯,看一下啊,这这啊MS结构啊,这个Microsoft这个document里边有啊,你可以看到它里边的啊东西啊,也比较这个明显啊,就是什么呢?首先是一个窗口句柄,然后是一个消息码,一个是这个两个参数,一个时间啊,还有一个呢,是你发送消息的时候,你鼠标在哪的一个坐标啊,这个的里边就一个S坐标,一个Y坐标啊,这就是它的一个结构啊,那这个东西你可以看到啊,其实非常明确的啊,跟我们刚才看到的这个生成的这个模板里头有一个东西是不是特别像,就是它有一个这个消息的一个处理啊,在哪来着。
09:06
盖的消息啊,这个消息其实就是MS结构,你看啊,在这儿就是MS结构,然后它底下呢,有一个消息处理啊,在这儿呢,它这个消息处理,你看它的四个参数,实际上就我们结构里的前四个参数,就是我们的句柄消息和两个参数啊好,然后呢,我们看完这个东西之后,我们来继续啊,继续写。我们啊,有了这两个局部变量之后呢,我们接下来呢,就要往下写了啊,就是比如说我们要干的第一件事儿,就是我们要获取什么呢?获取一个呃句柄,什么句柄呢,我们来看一下我们的这个w nd class这个结构啊,它这里边有一个什么呢?有一个叫做这个啊实力句柄的东西,这个东西呢,我们现在呢,不可能来出现这个东西,所以说呢,我们要通过个A,那们现在呢就直接来啊,但是呢,注意点是么,我们这个函数还没有封口啊,什么叫没有封口呢?就是还没有没有啊没有,所以说你要在底下先给它来一个P啊,防止一会你忘了的话,可能会出现一些问题啊,然后这两个啊,给它大小写统一一下啊,这样好看一点。
10:11
好,接下来呢,我们现在呢,就开始定义啊,定义我们的这个。啊,不对啊,不不能说定义啊,应该是获取啊,我们直接用这个in啊,用调用一个叫做这个get啊,Model handle的一个API啊,E个想要获取哪一个模块啊,然后但是呢,我们这不需要啊,我们要填个no,填no的意思是什么呢?就是获取本模块啊,或者是说获取主模块,因为你一个ESE程序啊,你里头的模块,包括一个主的模块,就是你的ESE,剩下呢,还有一些加载的动态链接库,比如说什么这个U432啊啊,什么GDS2啊,什么三二啊,这些都是动态库,那现在呢,你要获取的是哪一个模块呢?你传到的情况下,你获取的就是ESE啊,拿到它的这个模块机,然后现在呢,你要把它放在哪呢?放在你刚才定的这个局部变量里啊,然后诶,我局部变量定义了吗?啊在这呢啊,定义全域局变量了啊,我我在这儿啊,然后我们把它全局变量复制出来,然后呢,我们用一个目把它复制个这个。
11:17
值过去,那我们这个WIN32的IAPI啊,因为它调用的是std啊,这个标准的这个啊WIN32用的,那我们它的返回值呢,在这个E里,所以说呢,现在我们行E给它进行一个值呢,就给去了,去之后呢,接下来呢,如果你要给它这个进行这个把它呢,对它这个类里边成员进行赋值呢,怎么用呢,首先你直接一个push把它呢复制进站里边,然后呢,再给它pop到哪呢?Pop到它的这个成员里啊,这不是有一个这个结构嘛,我们直接把哎呀我输出符号了啊艾特啊这个这个结构啊,这个结构里边的实力句柄啊,你直接这个给它点,然后呢,有一个叫hi什么玩意儿,我忘了啊,我直接复制一下就是他啊。
12:03
好,你再泡泡到他身上啊,这个事儿呢,就给他这个过去了,那接下来还有一些其他的这个成员啊,需要这个进行这个值啊,比如说我们的这个。嗯,不对啊,我这复制之前,我应该先给他进行一下这个初始化啊,应该再进行一下初始化啊,这样不太好,直接我在这儿给他进行一下初始化吧啊,In work in work,然后RTL这个Co啊。Memory。哎哟,咋这么卡呢,这玩意儿。Zero啊,我清空内存啊,然后清空的是什么呢?清空的是我这个结构ADR啊我这个结构。然后轻多长呢?我们直接用一个这个size off的一个这个为止令啊,Size size的为止令啊,来计算一下它这个结构有多大,然后呢,把这个这个大小的内存全部清空清空,诶我这个是zero memory怎么回事?
13:07
为定义标识符rtl zero memory。M。啊O啊,写反了。好,然后呢,接下来呢,我们继续啊,继续我们给它清空完内存之后,接下来就可以这么做了啊,比如说我们现在第一步啊,把它这个句柄弄进去,弄进句柄之后呢,我们还要给他添这个,呃,对它窗口的这个光标进行设置啊,那这个光标呢,我们也没有这个相关的资源,我们只能从这个用这个系统来给它加载一下啊,它有一个叫做这个low的CUSO的一个API啊,它就是用用来加载你的这个光标的,然后呢,首先啊传一个零,接着呢,你给他传一下光标的一个ID啊,这个ID呢,我们用一个IDC啊,然后呢,它加载完之后啊,它会把它的这个资源的一个句柄啊放在你的ES里,那这个时候呢,你直接啊给它木就行了,木到这个结构里木at ST啊,这个有点麻烦,我这样直接来啊,然后点什么呢?点那个叫做。
14:11
嗯,HCU,然后这个E放我们给它填充了两个两个东西了啊,然后接下来呢,你还要填充什么呢?还要填充一下你这个结构的一个大小,就是这个结,这个结构啊,它有多大啊,也是需要填充的,然后我们给它进行一下木。墓,然后呢,这个成我们去看一下啊,他木在这个。嗯,它大小在哪儿来着。他应该是有一个大小来着,Cb size应该是。
15:00
这是个A。我给他填一下啊,直接填一下,看看它报不报错,如果报错就是没有这个成员了,C,嗯,C size,然后size off啊,我们直接把这个结构的这个类型啊,给它计算一下填充进去。好,然后呢,我们填充完它的这个结构大小之后呢,接下来呢,我们要给它设置一下它的这个风格啊,一个style。两种。好,然后呢,还有这个。两种进行一下货,然后还有什么呢?还有我们的这个主函数一会儿需要设置一下,但是我们现在没写主函数先空着,然后呢,我们还需要它的背景。
16:00
它的背景叫。这个啊,这个。然后对它进行一个设置啊,这个car colo,然后window啊加一好,然后接下来呢,是你的这个类名啊,对类名进行一下设置。也就是他这边有一个应该有一个叫class name之类的东西,这呢啊rpa class name。啊,对它进行一个设置。然后这个呢,在我们的前面全变里有定义这个类名啊,我们直接过来给它放在这就行了,好,然后呢,我们接下来呢,就要给他来这个填充一下主窗口了,那我们现在呢,要再来一个就是主循环啊,主循环呢,我们需要单独一个函数啊,首先是一个这个PC,然后是这个温妹。LC我们要保留三个计算器啊,一会因为用到,所以要把它只保存起来,就是我们的这个EDIEDI和这个esi,然后呢,我们要四个参数啊,首先窗口句柄,然后呢,呃。
17:15
然后参数。I。好,然后呢,需要几个定义几个这个本地的东西,本地的局部变量啊,首先啊,我们要定义一个这个绘制用的这个结构。啊,这是一个绘制的结构,然后呢,我们除了绘制结构之外呢,我们还需要一个这个,呃,环境啊,环境啊,或者说窗口的一些信息。
18:05
嗯,还需要一个DC啊,用来绘制。然后呢,我们把它先给它做一个结束。啊,其他东西呢,我们先不填写啊,我们现在这放着,然后现在把它的名字呢,我们现在要用一下啊,我们给它填充到我们这边的主的这个,呃,窗口类里边。嗯,那我现在呢,要给它进行放到我们窗口类里边,那窗口类它的主函数设置是什么来着,窗口类的主函数设置是这个啊不对,是不是这个是这个是这个是这个PC啊PC好。好,这样呢,我们就给它这个窗口类设置好了,设置好窗口类之后呢,我们要对窗口类进行注册,我们直接调用一个这个引work,然后呢是re GI class ex,然后它的参数只有一个,就是我们刚才填充好的这个窗口类。
19:17
填充完这个窗口类之后呢,接下来呢,我们要建立窗口和什么呢?和这个显示窗口啊,那这个是需要一个比较复杂的一个过程的,那我们现在首先啊,对它进行一个work。首先create,哎呀,我变自动变大写了,In in work create啊,Create window。Ex,然后它的参数,首先第一个扩展风格啊,一个窗口的一个扩展风格啊,我们直接随便写一个。然后第二个呢,是窗口的一个类名。
20:02
S class name,窗口类名之后呢,是我们的这个标题的名字,那标题名呢,我们刚才也给它声明成这个全局变量了,那我们现在拿过来好标题名,标题名完事之后呢,就是我们的这个,呃,窗口风格。窗口风格之后呢,是首先是你这个左,你这个窗口左上角在哪,比如现在在在这个位置就是零零在这个位置就是什么这个N加1N加几的这种啊,那我们比如说我就给他在这个100乘100的位置上开始,然后呢,再设置一下你的窗口大小,比如说我们设置一个600乘400的一个窗口,然后呢,我们需要这个聚丙聚柄呢,就不需要填我们一个闹。聚柄之后呢,是我们的这个菜单啊,菜单也不需要,也是一个闹,嗯,闹完之后呢,我想想啊,应该还需要一个实例句柄,那实例句柄这个东西我们需要填一下,我们在确定变量里定义过,我们刚才也给它进行赋值了,那我们直接给它填上实例句柄,填完实例句柄之后,最后一个参数是参数啊,那参数我们也不要了啊,就这么着完事儿,完事之后呢,我们现在呢,把这个我们呃c window ex,它也是一个window API嘛,它也会有返回值,它的返回值呢,依然放在ES里,那我们这个ES呢,是一个窗口句柄,那我们就把这个放到我们全局的这个窗口句柄这个变量里啊,给它移动过来啊,那我们直接一个目,然后用这个窗口句柄来接收啊,接收一个E啊,然后给它放复制,放成全局的这个呃值,然后呢,现在呢,我们窗口已经创建出来的,但是并没有显示出来,那显示出来的时候呢,我们现在呢,要给它进行一个这个呃秀window啊,那window呢,首先呢,我们直接调用这个in work啊,就可以调用这个秀。
21:57
Window。
22:00
有W啊,没有S啊修window,然后呢,传它的参数啊,第一个参数你就要操作哪个这个窗口的窗口句柄,那我们刚才直接拿到了这个窗口啊,窗口句柄直接给他传过去,传过去之后呢,它的第二个参数就是您要以何种形式进行这个呃显示啊,因为窗口呢,有很多很多的这个形式啊,比如说隐藏的呀,什么其他的这种啊,那我们呢,以一种默认的形式就行了,SW啊SW,然后呢是这个CR示,然后。啊,不对,没。没有补全呢,Update啊window没有没有S啊,还是注意没有S,然后啊,用这个窗口句柄给它进行设置啊好,这样呢,就给它刷新出来了,Update window未知的标志符DA啊T啊T啊这啊。
23:09
好,这样呢,我们就给它创建完了啊,那么首先我们先给它重新生成一下,看有没有哪有错啊。嗯,看一下这啊。这三个logo。这有个EBX。PLC u ebx,我看一下这哪有问题。Us啊,不是ES啊。然后那个错误就没了,然后呢。
24:00
Get handle get handle有什么问题?啊,所以先不管呢,我们把这个代码先写完啊,我们这儿已经创建完窗口了,创建完窗口之后呢,我们要写一个消息循环,那消息循环呢,我们就直接用一个伪代码,一个这个while啊while来循环啊,然后呢,我们直接一个while处让它死循环,因为如果说循环一旦出来了,这个窗口其实就结束了啊,然后我直接一个摁W跟后边,最后呢,这个函数呢,得有一个返回啊,那我就return一下,然后在这个消息循环里头干嘛呢?我们首先呢,要这个调用一个叫做get message的一个函数啊,它会从你的现成的消息队列里取得一个消息啊,然后把它放入一个这个MS结构里啊,那首先我们调用一下啊in work,然后呢get a DR要充,那我们个我们个局部变个S。嗯,我没打字呢,看错行了啊STMSD啊给它填充进去,填充进去之后呢,我们,嗯,后边呢,还有几个参数啊闹铃。
25:08
这些不重要啊,好,这个就获取到消息了,接下来呢,我们要判断一下它的返回值啊,如果它的返回值呢,是一个啊,那就要返回啊,因为它如它只有什么情况下它会是零的,我们来看一下啊,我们来搜一下它这个函数。Get这个函数啊,我们来看一下它的返回值啊。它的返回是只有在退出消息的时候才会是零啊,然后呢,如果是这个除了退出以外的消息都是非零值啊,所以说我们如果遇到零值直接就退出就完了啊,那这呢,用一个高级语句啊,直接一个这个呃,Break啊break啊break if啊break.if应该说这样呢,我们判断的就是什么呢。If啊,这个呢,你在后边判断什么,比如判断ES等于零啊,那这个时候呢,如果说ES等于零它就会啊,是这个意思啊好,那么我们判断完它的结果之后啊,如果走到这儿了,说明它就不是这个我们的这个,呃,退出消息,那不是退出消息呢,我们在这个位置上呢,首先你要把这个虚拟的键消息转换成一个字符啊,那这呢,调用一个API。
26:23
卡了啊。七二。啊,这不对啊,当然多一个字TRNS,嗯,对了可以了,然后呢,我们它的这个结构呢,就是它要用的参数呢,也是我们刚才的那个消息的结构啊,直接过来就行了,然后呢,我们给它转换成我们的这个字符消息之后呢,我们要把这个消息啊分发给我们的窗口过程啊,那我们这呢,要对它进行一个分发,第四,Its。
27:00
好,然后呢,结构呢,还是刚才这个结构啊,我们直接对它进行分发,分发完事之后呢,我们这儿呢,就结束了啊,就结束了啊,如果这个一次循环就结束了啊,然后呢,我们这个呢,就是这个主函数啊,要用的东西好,那主函数用完的东西呢,我们有了之后呢,我们在这儿呢,肯定是要在主函数,呃,在我们的函数里啊,对它进行一个拷啊,调用它一下,我们直接拷啊。其他都不用写,接着呢,我们要去处理什么呢?处理这个啊,这个消息处理啊,消息处理,那我们刚才呢,已经这个定义好了,那我们接着往下写,就是首先呢,我们这不是有一个消息这个参数吗?我们先把这个消息给到我们的。给到EAS里之后呢,我们接下来呢,要这个开始啊,判断是什么消息,比如说if啊,我们的E等于等于WM啊,然后piint啊,这个就是绘制消息啊,那如果绘制消息呢,首先呢,我们要注意为这个窗口进行的绘图工作啊,进行一个这个准备,然后把相关的相息,相关信息呢,填充到这个我们这个PT,这个STRU的这个结构里啊,那现在呢,我们就来给进行一个操作啊,那首先啊。
28:19
In work begin t,然后呢,它的参数啊,是首先第一个是窗口句柄啊,这窗口句柄传过来了,我们直接用窗口句柄之后呢,呃,不对,我这个窗口句柄好像写岔劈了啊,我应该用这样写。哎,还是有红的,那可能不冲突啊,那第一个是这个窗口句柄啊,窗口句柄之后呢,是我们的这个结构啊,我们这个结构。啊,这就是开始绘图,然后把结构,把这相关信息填充到这个结构里,开始之后呢,接下来下一步啊,就是我们要获取一下它这个DC啊,把这个DC从这个ES里拿出来啊呃,他这个begin paintt呢,它就会把这个它的返回值呢,就是一个DC啊。
29:13
然后我们直接啊放到这个艾特HDC。里边啊,Ex。嗯。啊,不是work啊,写错了,是木好,现在呢,我们木进去了,木进去之后呢,接下来呢,我们要获取一下这个指定窗口的一个客户,客户区大小。In work啊,然后是这个。CL。嗯,没有这个补全I。啊有了,然后接下来啊,它的参数第一个还是什么呢?还是我们的窗口句柄。窗口句柄之后,窗口聚柄之后啊,就是我们的这个,呃,环境结构啊,这个结构。
30:10
好,这样呢,就获取了下我们指定窗口的区域大小,获取完之后呢,我们可以在这个窗口上写上字,也可以不写啊,这个随你啊,我们直接引work啊给个字。首先第一个参数是我们的这个DC。然后呢,第二个参数呢,我们的这个文字。第三个啊,我们传一个负一啊,第四个是我们的这个客户区大小。
31:06
好,Q距大小之后呢,我们还需要给他我看一下啊,我有点不太记得后边参数是什么了,我们来查一下它这个说明文档。啊,这是不对,不是这个。还有一堆虫仔啊,我们看的是他这个原生的状态啊,这个WIN32的这个。嗯。一个ictict后边就是一个格式化啊。啊,那我们来找一下啊。他这有他这个红啊,可以多个红给他做一个这个拼接啊。就是和一下嘛,就相当于。
32:30
好,然后呢,我们就开始结束绘图啊。Paint啊,然后窗口句柄。今天这个不知道为什么特别卡,打字都费劲。好,结束。
33:00
这个。Close,然后那这个如果是关闭消息呢,那我们首先呢,第一步呢,是要通过这个work啊,把这个窗口给它释放掉。然后我们用传局的这个句柄啊,给它传进去。释放完事之后呢,我们发送这个退出的消息啊,然后让这个窗口主动退出。
34:08
It。Me box啊,不对,哪有box下意识的no,好,这样就完事了,完事之后呢,如果说啊,这个都不是两种状况,那我们直接调用else,一种缺省的状况啊,就是首先我们直接一个in work啊调用什么呢?调用我们默认的默认的这个函数啊。Window proc。然后参数跟上边是一样的。然后直接一个return返回。底下啊,我们是这个N的if。嗯,然后再。
35:03
呃,理论上是应该没啥问题的,但是好像刚才有报错啊,我们来重新生成一下啊,解决一下错误问题。这个in work。嗯,这块是。DAWTE。XT。啊,这儿的问题啊,这个。少个逗号。A DR test。看一下还有没有这个错误。这应该是没了,然后位置符号DR。
36:00
DR啊,这呢啊,这个DR这个是。那这个应该是DT。DT啊,然后VCTR,然后。再看。点LEX等于等于vm close,哎,这是什么问题,看一下啊。呃,我窗口那注册了没有看一下啊注册了。啊L啊,不对,没有啊,没有问题,Ex等于等于。WM。Close。
37:07
哎,这是什么问题?
39:25
哦。因为点扣子在这儿,他这些东西都不在点扣子里。啊,重新生成啊。哎,咋卡住了呢,圣城。暗中观察。
40:03
重新生成好成功了啊,我们运行一下看看。可以看到啊,我们窗口呢,就已经成功了啊,刚才写代码其实没有问题,只是我的代码段的起始位置写错了,呃,然后呢,这个呢,你可以看出一个问题啊,就是虽然说我们的标题啊,我们内容都已经正常的显示了,但是有一小问题就是我们后边还有一个黑窗口,有一个控制台。那这种情况呢,实际上呢,我们是可以通过设置它的环境啊来解决的,就是在我们的属性里头,它有一个叫做这个连接器,然后系统的地方,然后把子系统呢,从控制台啊,我们改成窗口就可以了,应用确定,然后呢我们重新生成。重新生成之后呢,我们再运行,诶,你可以看到啊,它就没有那个黑窗口了,而是直接出现了一个呃空这个wince的一个窗口程序啊,那这个呢,就是我们完整的一个代码,一共就两段两个函数啊,两个函数啊也不难啊。
41:05
好,那么还有什么问题没有啊,然后没有问题的话,今天的技术部分就结束了。
我来说两句