4-7.Windows窗口与消息

那今天呢?我们来介绍一下windows界面儿以及消息的开发,那为什么要介绍这部分知识呢?这是由于webrtc peerconnectionclient端就是由windows的底层API来实现的。那对于这部分知识呢,可能很多同学都没有接触过,所以这里我有必要给大家做一下这方面知识的普及。

那首先我们来看一下这个demo程序啊。我们运行一下,那这个呢?就是peerconnectionclient端,它的一个主界面非常简单,你可以输入新的服务器的地址端口号,这样我们点connect button。就可以连接到信令服务器了。

那对于这样一个界面,我们可以通过很多方法来实现比,比如说你可以使用QT,也可以使用mfc对吧?对于peerconnectionclient端来说呢?它是使用的最底层的C语言API来实现这个界面儿了,对于这块儿知识呢,可能大家都不太熟悉了。这里简单介绍一下,那下面呢?我们就来看看,对于windows编程都涉及到了哪些知识点,

第一点我们要知道的是,对于windows程序来说,一切都是窗口,无论是我们给用户展示的主界面。还是主界面中的文本框button,那这些呢?其实都是一个个的窗口,只不过是把这些小的窗口。放到了大的窗口之中,这样排列组合成了一个我们看到的界面。

所以第一点,我们一定要清楚,对于windows程序来说呢,一切都是由窗口组成的好,这是我们第一个要知道的知识点,

那第二个知识点呢,是所有的windows程序都是由信令驱动的。那无论你是点击一个button还是滑动窗口,还是在文本框中输入字符,那最终呢,它都会转化成一条一条的消息。传到我们的消息,处理函数中再通过消息,处理函数调用我们自己实现的逻辑。

那这两条呢?就是windows编程的一个核心,一个是一切都是窗口,第二个呢是程序的执行,是由消息驱动的。

下面我们就来看一下windows程序是由哪一些组件构成的?那第一个呢?就是文本函数。它就像我们C语言中的幂函数一样,对吧?是程序的入口点,在这个入口点中,我们可以写我们自己的一系列的逻辑,
比如说窗口的创建。消息的分发都是在文本函数中执行的。

那第二个呢,是消息处理函数WndProc,比如说我们点击某个button,或者是在文本框中输入一些字符的时候。那这些操作呢,就会以消息的方式传递到WndProc函数中。在这个函数中呢,我们对各种各样的消息进行处理,那最终呢,再调用我们自己的逻辑,这就是windows程序的一个基本构成。

好,那我们先来看看。WinMain中都包含了哪些?那在WinMain中呢?

首先包括了窗口的创建。那第二个呢,是包括了消息的分发,那刚才我们已经介绍到了WndProc这个函数呢,是对消息处理,

那消息从哪来呢?就是通过消息分发这个模块来获取到的。对于这块儿内容呢,一会儿我再向你做详细介绍,那下面我们来看看windows窗口的创建。

实际上windows窗口的创建是由多个步骤组成的,那第一个步骤呢,就是我们要注册一个窗口,在注册窗口的时候,我们要指定消息的处理函数是哪个?比如我们前面介绍的WndProc,这就是消息的处理函数,对吧?那默认情况下,

我们使用的消息处理函数都是WndProc。当然,你也可以改变这个名字,比如说我们给它起个名字叫ABC,那你就对应的实现一个ABC的函数。那当有消息来的时候呢,就会将消息传递到ABC这个函数中,我们在ABC这个函数中呢,再做消息的处理。所以这个函数名我们是可以通过注册窗口来改变的。那除此之外呢,实际上在一个大的窗口中,有可能包含了很多的小的窗口,一个button,一个文本框,

对吧?那所有这些窗口的事件呢,都是通过我们注册窗口中指定的消息处理函数。来处理了。好,那现在我们可以知道注册窗口最主要的一个功能就是指定消息处理函数,对吧?

那除此之外呢?比如说窗口的风格呀,背景啊,这些呢也可以。通过注册窗口函数来指定,这是注册窗口的作用。好当窗口注册好之后呢,

我们就可以调用创建窗口。将之前注册好的这个窗口呢,实现出来,也就是说在内存中给它创建一个实例,在创建窗口的时候呢,我们可以指定窗口的起始位置。比如在这一块,对吧?然后还可以指定窗口的大小,比如它的宽是多大,高是多少?

那这样呢,我们就创建出了一个真实的窗口,但是现在创建的这窗口,它只是在内存中创建了,并没有真正的显示出来。

那最后呢,我们还要将内存中的窗口通过显卡给它显示出来,这样我们在屏幕上才能真正的看到这个窗口,这就是我们创建窗口的三个步骤。

第一个是注册窗口,最主要的功能是为了指定消息处理函数,

那第二个呢?是创建窗口。此时创建的窗口是在内存中并没有显示出来,

那第三步呢?是将内存中的窗口通过显卡给它显示出来。这样我们才能真正的在屏幕中看到它。
那所有的这三步呢,其实都是在main函数中执行的。

那再接下来我们看一下消息分发。对于我们的windows界面来说,可能同时存在多个应用程序。那每个应用程序都有自己的窗口。所以当我们点击鼠标或者是摁下键盘的时候,哪些是发给我们应用程序的消息,哪些是其他应用程序的消息?这都是由系统来分发的,那我们在获取消息的时候呢?windows底层给我们提供了一个API,通过这个API呢?可以获取到属于我们自己的消息是吧?

那第二步呢?是当我们收到键盘消息的时候,我们还要对它进行一次转换。转换之后,才能由我们的消息处理函数进行处理,否则的话呢,这些消息是我们无法识别的。

最后一步呢,是消息的分发,也就是说将转换好的消息通过消息分发函数将我们的消息。最终传送给消息处理函数,这样我们的消息处理函数才能进行后面的逻辑的处理,那这就是消息分发。所以对于main函数来说呢,它包括了两大块儿,第一大块儿呢,是窗口的创建,第二大块儿呢,是消息的分发。那对于窗口创建呢?

它包含了三步注册窗口,创建窗口显示窗口,而对于消息的分发呢?也是三步,先是获取消息,第二呢是将键盘消息转换成消息处理函数可以识别的消息。第三步呢,是进行消息的分发好,那下面我们就来看一个事例,对吧?对于main函数来说呢?前面那些就是窗口的创建,那后边呢?就是消息的处理,

首先在一个while循环中,通过get message获取我们这个应用。收到的消息之后呢?对这个消息进行转换,对于一般的消息来说呢?这个函数没有做任何事情,但是对于一些虚拟键盘的消息来说呢?它要做一层转换,这样才能被识别到最后。通过message,将这些消息呢传送给消息处理函数。那下面呢,我们再来看看消息处理函数WndProc它做了哪些事.

那对于WndProc来说呢,它会根据每个消息做不同的逻辑处理。所以在这个函数中呢,我们可以写一个switch case,判断每个消息,那对我们关心的消息呢,做特殊的处理。对一些不太重要的消息呢,我们可以通过def OT window proc执行默认的处理。

比如说当我们点击窗口的插按钮的时候。那这个窗口就会被关闭掉,当我们点这个最小化的时候,它就变成最小化,这些呢都可以。通过def window proc来进行处理,而像一些绘制相关的内容,

我们就可以单独进行处理。但是在这里呢,实际上我们并没有做任何事情,所有的消息呢,都交给默认处理函数进行处理了。所以后边我们在看这个例子的时候,你会发现我们创建好窗口之后呢,什么事也干不了,只能让它最小化。给它关闭是吧?只能做这两件事情,当然如果我们想写一个复杂的应用的时候,你就可以在这个函数中呢,针对我们关注的消息,单独做逻辑处理。

那以上呢,就是我们用c底层代码来实现windows程序的一个基本的步骤。那了解了这些知识之后呢?后边儿呢?我们再通过一个实例,咱们来看一下具体它是如何做的?那有了这些基础知识之后,我们再来看peerconnectionclient端的。代码就非常容易了OK,那我们今天的课呢,就到这里,谢谢。

如有侵权,请联系我删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中设计Windows窗口程序的基本步骤如下: 1. 引入Windows.h头文件,该头文件包含了Windows窗口程序所需的函数和常量。\[1\] 2. 定义WinMain函数作为窗口程序的入口点。\[1\] 3. 创建一个空的Windows窗口项目。\[2\] 4. 在WinMain函数中,注册窗口类,这是创建窗口的必要步骤。\[2\] 5. 创建窗口,指定窗口的样式、标题、位置和大小等属性。\[2\] 6. 进入消息循环,等待用户的输入和系统的消息。\[2\] 7. 在消息循环中,使用回调函数处理窗口消息,例如鼠标点击、键盘输入等。\[2\] 8. 如果需要显示窗口,使用ShowWindow函数将窗口显示出来。\[3\] 9. 使用UpdateWindow函数更新窗口,确保窗口显示内容正确。\[3\] 10. 编写完整的代码,包括窗口类的注册、窗口的创建和消息循环等。\[2\] 请注意,以上是一个简单的窗口程序设计的基本步骤,具体的实现可能会有一些细微的差异。 #### 引用[.reference_title] - *1* [C++ Windows 窗体程序入门 - 1.你的第亿个窗体程序](https://blog.csdn.net/wind_2067/article/details/124568379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C/C++ 从零实现一个windows窗口(非常详细)](https://blog.csdn.net/weixin_50964512/article/details/124140735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值