4-8.实战-实现一个最简单的Windows应用程序

那在上节课中呢?我已经向你介绍了如何通过底层API实现windows程序开发的一些基本知识。那今天呢,我们就来具体实操一下,利用我们上节课所学习的知识来开发一个最简单的windows程序。啊,我们首先切到windows环境下,那现在这个项目呢?就是我创建的一个最简单的通过底层API实现的windows应用程序。那我们可以看一下啊,它在这个工程中呢,主要有两个文件,第一个呢是windows点cpp,

第二个呢是main window点cpp。其中,simple window点cpp呢,主要存放的是温门程序入口点,那在这里边呢,实现了一些简单的逻辑。第一个呢,是对窗口的创建。那最终呢,是通过温闷window这个类来实现的窗口儿创建,那第二块儿呢,就是对消息的分发。对于消息分发这一块儿,它的格式是固定的,首先调用get message,

从windows系统获取我们这个应用。收到的所有的消息,那之后呢,通过translate message对这个消息呢,进行一些变换,其实主要就是对一些键盘的虚拟消息做一些变换。对于其他通用的消息呢,它不做任何处理,最后调用dispatch message将消息传给wndproc。处理函数进行消息处理,那接下来我们再看看问window文件它做了哪些事情,那么window呢,实际就是封装了一个类,那在这个类中呢,实现了窗口的创建。

以及消息的处理,在这里边我们可以看到它提供了两个公开的方法,一个是create用于创建窗口。第二个呢,是destroy用于销毁窗口。在其内部呢,又定义了两个重要的函数,一一个是wndproc。用于消息处理,第二个呢,是用于注册窗口类好,那下面我们来一一看一下,首先看看create。做了哪些事情?好在create里边呢,

首先是调用了内部的方法。register window class对窗口进行了注册。之后呢,调用create window exw创建窗口,当窗口创建好之后呢,再调用show window将创建好的窗口。通过显卡显示出来,这样我们屏幕上就可以看到这个窗口了,这是它最为重要的一个API,就是create。那紧接着呢,我们再来看看注册窗口里实现了哪些功能,那对于这个内部函数呢,它先调用了系统的EX,注册了一个窗口,

对吧?注册窗口的时候呢,指定了消息的处理函数是,并且还指定了窗口类的名字。是class name。那这个值呢?实际是一个常量了,我们来看一下对它定义的是simple window好,那比较关键的呢?就是这个wndproc对吧?我们再来看看。wndproc它实现了哪些功能?实际上,对于这个例子的wndproc来说呢,它啥也没做。

当收到消息之后呢,就调用了default window proc进行了一个默认处理就OK了好,那通过这个程序的分析呢,我们可以看到它还是非常简单的,对吧?那现在我们可以运行一下,可以看到当我们运行这个程序之后呢,它就会弹出一个窗口,这个窗口呢,可以伸缩。放大缩小,那在这个窗口中呢,包含了三个默认的button,一个是最小化,一个是放大。

还有一个关闭。就是这三个button,所以这个代码呢,还是非常简单的好,那如果你想调试的话呢,可以在温这块儿呢,设一个断点,然后重新编译。这个时候呢,它就会停在这个断点处那下面呢,我们可以单步执行,看它每一步都做了哪些事情。好,首先创建一个慢window,这个对象之后呢,

调用它的create方法去创建窗口,进入到这个create函数里。那在create函数中呢?首先,调用register window class来注册一个窗口。我们再单步执行啊,当窗口注册完成之后呢?会调用create window exw来创建一个窗口,那第三步呢?当窗口创建成功之后。调用show window来显示窗口,那这个步骤呢?实际就与我们上节课介绍的知识就匹配上了,对吧?我们上节课也是向你介绍它在创建窗口的时候,

实际是经过三个步骤,一是注册窗口,二是创建窗口,三是显示窗口。当窗口创建好之后呢,就通过一个外循环来不停的处理消息,那最终处理后的消息呢,就会调到。问,proc这个函数中来,我们在这儿设一个断点,这时候我们运行,那您可以看到这个断点呢?就停到了proc。这个函数中,

那我们单步执行,那在这个函数中呢?目前没有做过多的逻辑,只是做了一个默认处理,对吧?那如果我们继续执行的话,每次有消息来之后,它都会停到断点处,等待我们继续执行。OK,那通过这个例子呢?我们就可以知道通过windows底层API实现一个非常简单的界面程序,还是蛮简单的,但是我如果我们想构造非常复杂的,有很多交互逻辑的应用程序的时候。

那使用这种底层的API就非常麻烦了,因为这样我们就要处理很多的父窗口子,窗口之间的那个逻辑关系,那在做这种应用的时候呢,实际我们更应该使用mfc。或者是这种库来去实现更方便一些,那通过底层这种方式呢就会麻烦很多,比如我画一个复杂的控件儿都要花很长时间,对吧?不过,对于我们后面要了解的peerconnectionclient端来说,它的界面呢,其实是非常简单的,只有三个页面,那每个页面中呢,都有很少的这个子控件儿

对于这种应用来说呢,使用这种底层的API反而倒更容易让我们理解它的代码逻辑是怎样的。如果对于这种简单的应用,我们也使用非常复杂的这个mfc库或者是QT库。那反而倒增加了我们的学习成本,这就是为什么peerconnectionclient要使用底层API这种方式的一个根本的原因。OK,那通过上面的介绍呢?我相信你已经对开发这种非常简单的windows应用程序的流程非常熟悉了,那这也为我们后边儿学习webrtc代码打下了一个非常好的基础。

如有侵权,请联系我删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值