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程序实例分析的主要内容,如果未能解决你的问题,请参考以下文章