西北工业大学 软件与微电子学院 Windows程序设计综合训练 实验报告 实验二.docx

上传人:b****5 文档编号:6474737 上传时间:2023-01-06 格式:DOCX 页数:10 大小:310.54KB
下载 相关 举报
西北工业大学 软件与微电子学院 Windows程序设计综合训练 实验报告 实验二.docx_第1页
第1页 / 共10页
西北工业大学 软件与微电子学院 Windows程序设计综合训练 实验报告 实验二.docx_第2页
第2页 / 共10页
西北工业大学 软件与微电子学院 Windows程序设计综合训练 实验报告 实验二.docx_第3页
第3页 / 共10页
西北工业大学 软件与微电子学院 Windows程序设计综合训练 实验报告 实验二.docx_第4页
第4页 / 共10页
西北工业大学 软件与微电子学院 Windows程序设计综合训练 实验报告 实验二.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

西北工业大学 软件与微电子学院 Windows程序设计综合训练 实验报告 实验二.docx

《西北工业大学 软件与微电子学院 Windows程序设计综合训练 实验报告 实验二.docx》由会员分享,可在线阅读,更多相关《西北工业大学 软件与微电子学院 Windows程序设计综合训练 实验报告 实验二.docx(10页珍藏版)》请在冰豆网上搜索。

西北工业大学 软件与微电子学院 Windows程序设计综合训练 实验报告 实验二.docx

西北工业大学软件与微电子学院Windows程序设计综合训练实验报告实验二

 

西北工业大学

《综合创作训练》实验报告

 

学院:

软件与微电子学院

学  号:

姓  名:

专业:

软件工程

实验时间:

2014年02月

实验地点:

毅字楼310

指导教师:

王犇

西北工业大学

2014年2月

一、实验目的及要求

1)理解Windows内核对象概念;

2)理解Windows进程及其创建的机制;

3)理解Windows窗口和句柄概念;

4)掌握Windows消息机制。

二、实验设备(环境)及要求

1)PC机最低配置:

2GHz以上CPU;1G以上内存;1G自由硬盘空间;

2)VC++6.0或者更高版本VC++;

三、实验内容与步骤

3.1创建一个win32工程实例

用VC创建一个win32Application,运行后,弹出下面的对话框。

请在实验报告中,写出创建过程(关键步骤要有截图)。

源码如下:

执行结果如下:

 

点击确定后,小窗口关闭。

思考题:

对话框是窗口,此外“确定”按钮和“关闭”按钮也是窗口。

3.2创建win32窗口程序

3.2.1程序框架搭建

按照4.1节的方法创建一个win32Application工程,根据教程中的内容搭建一个基本的win32窗口程序框架

源码如下:

 

 

 

运行结果:

 

思考题:

1.

(1)句柄是一个能够被进程中任何线程使用的一个不透明的值,许多API函数需要以它作为参数,以便系统知道要操作哪一个内核对象。

(2)程序实例句柄

2.

(1)注册窗口类

(2)创建窗口

(3)在桌面显示窗口,更新窗口客户区

(4)进入无限的消息获取和处理的循环。

利用GetMessage函数可以从调用线程的消息队列中取出一个消息来填充MSG结构

如果消息队列中没有消息(即没有用户输入),这个函数会一直等待下去,知道有消息进入到消息队列为止。

GetMessage函数从消息队列中取得的消息如果不是WM_QUIT,则返回非零值。

一个WM_QUIT消息会促使GetMessage函数返回0,从而结束消息循环。

此时调用把键盘输入翻译成为可传递的消息。

DispatchMessage函数分发一个消息到对应窗口的窗口函数。

 

3.2.2程序完善

3.2.1中程序是一个最基本的窗口程序,对于标准的Windows窗口程序,界面还缺少一些元素,如自定义的图标、菜单等。

根据教程中内容,在3.2.1程序的基础上,添加菜单项,自定义图标等资源,能够响应鼠标和键盘事件(鼠标右键点击,窗口工作区显示鼠标所在工作区的坐标,如X=100,Y=100;点击键盘按键,窗口工作区显示按键值,可以连续;注:

工作区只能显示一种事件的结果)。

 

问答:

简述Windows的消息处理机制。

消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。

例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。

消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。

Windows的消息系统是由3个部分组成的:

1)消息队列。

Windows能够为所有的应用程序维护一个消息队列。

应用程序必须从消息队列中获取

消息,然后分派给某个窗口。

2)消息循环。

通过这个循环机制应用程序从消息队列中检索消息,再把它分派给适当的窗口,然

后继续从消息队列中检索下一条消息,再分派给适当的窗口,依次进行。

3)窗口过程。

每个窗口都有一个窗口过程来接收传递给窗口的消息,它的任务就是获取消息然后

响应它。

窗口过程是一个回调函数;处理了一个消息后,它通常要返回一个值给Windows。

注意回调函数是程序中的一种函数,它是由Windows或外部模块调用的。

一个消息从产生到被一个窗口响应,其中有5个步骤:

1)系统中发生了某个事件。

2)Windows把这个事件翻译为消息,然后把它放到消息队列中。

3)应用程序从消息队列中接收到这个消息,把它存放在TMsg记录中。

4)应用程序把消息传递给一个适当的窗口的窗口过程。

5)窗口过程响应这个消息并进行处理。

步骤3和4构成了应用程序的消息循环。

消息循环往往是Windows应用程序的核心,因为消息循环

使一个应用程序能够响应外部的事件。

消息循环的任务就是从消息队列中检索消息,然后把消息传递给适当的窗口。

如果消息队列中没有消息,Windows就允许其他应用程序处理它们的消息。

Windows操作系统最大的特点就是其图形化的操作界面,其图形化界面是建立在其消息处理机制这个基础之上的。

如果不理解Windows消息处理机制,肯定无法深入的理解Windows编程。

可惜很多程序员对Windows消息只是略有所闻,对其使用知之甚少,更不了解其内部实现原理,本文试着一步一步向大家披露我理解的Windows消息机制。

可以说,掌握了这一部分知识,就是掌握了Windows编程中的神兵利器,灵活运用它,将会极大的提高我们的编程能力。

消息的传送

1、从消息队列获取消息:

可以通过PeekMessage或GetMessage函数从Windows消息队列中获取消息。

Windows保存的消息队列是以线程(Thread)来分组的,也就是说每个线程都有自己的消息队列。

2、发送消息

发送消息到指定窗体一般通过以下两个函数完成:

SendMessage和PostMessage。

两个函数的区别在于:

PostMessage函数只是向线程消息队列中添加消息,如果添加成功,则返回True,否则返回False,消息是否被处理,或处理的结果,就不知道了。

而SendMessage则有些不同,它并不是把消息加入到队列里,而是直接翻译消息和调用消息处理(线程向自己发送消息才是这样),直到消息处理完成后才返回。

所以,如果我们希望发送的消息立即被执行,就应该调用SendMessage。

还有一点,就是SendMessage发送的消息由于不会被加入到消息队列中(错:

线程向其他线程发送消息也是追加到其他线程的发送消息队列的,即使这两个线程在同一个进程也是如此),所以通过PeekMessage或GetMessage是不能获取到由SendMessage发送的消息。

另外,有些消息用PostMessage不会成功,比如wm_settext。

所以不是所有的消息都能够用PostMessage的。

还有一些其它的发送消息API函数,如PostThreadMessage,SendMessageCallback,SendMessageTimeout,SendNotifyMessage等。

Windows消息多级控制中心:

 

3.3编写一个简单win32计算器

源程序如下所示:

 

 

运行结果如下所示:

 

四、实验总结

在实验过程中遇到了很多问题,尤其是在编写计算器上,由于我们对基本概念和理论掌握的不是很牢固,因此花费了许多时间。

但是经过我们的努力,最终还是成功的完成了实验。

五、问题分析与讨论

在编写计算器的时候,一开始从键盘输入到文本框的数字无法参与计算,我们经过分析发现,是消息处理出现了问题,后经过改进,解决了问题。

 

六、教师评语

签名:

日期:

成绩

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1