002_GUI程序实例分析

Posted luosir520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了002_GUI程序实例分析相关的知识,希望对你有一定的参考价值。

一、 GUI 程序开发概述

1、现代操作系统提供原生SDK(Software Development Kit)支持GUI程序开发。
2、GUI程序开发是现代操作系统上的主流技术。
3、不同操作系统上的 GUI 开发原理相同,但 GUI SDK 不同。

二、 GUI 程序开发原理

1、GUI 程序在运行时会创建一个消息队列。
2、系统内核将用户操作翻译成对应的程序消息(用户对计算机进行操作时,操作系统内核就会检测到用户的操作,系统内核就会根据用户当前的操作来生成一个程序消息,于是把这个程序消息发送到一个有焦点的应用程序)。
3、程序在运行过程中需要实时处理队列中的消息。
4、当队列中没有消息时,程序将处于停滞状态。
技术图片

不同操作系统支持相同的 GUI 开发原理

技术图片

三、 GUI 程序开发的本质

GUI 程序开发其实就是两个主要的工作要做:

1、在代码中用程序创建窗口及窗口元素(说白了就是用程序来创建GUI界面)。
2、在消息处理函数中根据程序消息做出不同的响应。
技术图片

四、 GUI 程序开发实例

技术图片

五、 GUI 程序开发初体验

技术图片
技术图片
第一步:定义主窗口的样式
技术图片
技术图片
补充:在Windows里面(L后面加上一个字符串)表示该字符为宽字符,也就是说不再是ASCII,而是UTF-8或是unicode的编码。

什么是unicode?
unicode与ASCII一样也是一种字符编码方法,它占用两个字节(0000H—FFFFH),容纳65536 个字符,这完全可以容纳全世界所有语言文字的编码。在unicode 里,所有的字符都按一个字符来处理, 它们都有一个唯一的unicode 码。
使用Unicode 编码可以使工程同时支持多种语言, 使工程国际化。即在不同语言的系统下不至于产生乱码。

技术图片

第二步:创建主窗口
技术图片
技术图片

第三步:创建元素
技术图片

第四步:在屏幕上显示窗口
技术图片

第五步:通过操作系统提供的(GetMessage)函数到应用程序消息队列里将消息取出来,取出来之后进行翻译
技术图片

编译运行测试:
技术图片
这样第一个 GUI 应用程序就已经运行起来了,可以托大托小,也可以最小化,也可以最大化,它都有标准的Windows GUI 应用程序的行为。
此时点击按钮是没有任何反应的,根据 GUI 应用程序开发原理可知,当我们的用户做了一个按下的操作,那么Windows操作系统就会根据这个操作生成一条消息,生成的消息会放到我们的应用程序消息队列里,最终会发送到消息处理函数。但是发送消息处理函数好像什么事都没有发生,因为在消息处理函数里面并没有处理这条消息

点击右上角关闭按钮,会发现 GUI 应用程序还是在运行,并没有直接关闭,因为操作系统提供的默认消息处理函数(用来处理绝大多数windows GUI 应用程序应该拥有的行为)会把该 GUI 应用程序切换到后台运行。
技术图片

1.添加关闭窗口代码
技术图片
为什么使用(PostQuitMessage)函数?每个应用程序都会返回一个值给操作系统,那么这个调用就是将参数0返回给操作系统,并且退出自己。这个零就是告诉操作系统当前的应用程序是正常退出的。
技术图片
再次运行,点击关闭按钮就是真正的退出了。

2.添加代码处理按钮消息
通过创建元素时id值来知道用户按下的按钮是哪一个。也可以通过消息里的第三个参数的低位获得id值,第三个参数的高位获得真正用户的动作
技术图片
再次运行
技术图片

六、 用 MFC 来完成刚才的应用程序

1、新建一个 MFC 工程
技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片
MFC 这套框架已经完整的实现了经典的 GUI 程序开发模式,它对于界面的开发是靠拖拽来完成的,也就是可以直接操作不用写代码来创建主窗口了

2、我们可以把主窗口不想要的通通删除掉
技术图片
3、然后编译,运行
技术图片
我们一行代码都没有写,这个 MFC 应用程序就运行起来了
4、从工具箱里面拖出一个按钮放到主窗口
技术图片
修改元素
技术图片
仍然没有写任何代码,再次编译运行
技术图片
点击按钮发现没有任何反应,那是因为还没有编写消息处理函数
5、编写消息处理函数
右键选择类向导
技术图片

技术图片
添加处理函数
技术图片

技术图片
双击之后,MFC 的框架就将我们定位到这里
技术图片
在函数体内编写点击后执行的代码
技术图片
到目前为止就只写了这一行代码,编译运行
技术图片
在 MFC 这个框架里面,将点击按钮这个消息直接映射到了一个类函数上面去了

七、 总结:

GUI 程序开发包括:
在代码中用程序创建窗口及窗口元素。
在消息处理函数中根据程序消息做出不同响应。

 

以上是关于002_GUI程序实例分析的主要内容,如果未能解决你的问题,请参考以下文章

C#_.NET_002_购买域名和绑定域名(未完待续)

GUI程序分析实例

69期-Java SE-016_集合-2-001-002

python的学习笔记/002-1(2018-5-18 )

为什么Python multiprocess.Process调用在应用程序中启动多个self实例?

002 元类的创建及简单使用