设为首页 收藏本站
查看: 795|回复: 0

[经验分享] 与windows编程有关的主要概念

[复制链接]

尚未签到

发表于 2018-6-19 13:46:28 | 显示全部楼层 |阅读模式
窗口
  窗口的概念很轻易了解,就是我们运用软件时看到的界面。Windows 的中心就是窗口,它是Windows一统PC操作零碎市场的杀手锏,如下图所示:

  图1:记事本程序
  我们运用的软件都有本人的窗口,比方 QQ、盘算器、记事本等。这些窗口可以包括输出框、下拉菜单、单选按钮、多选按钮、文本区域等各类各样的控件(Controls),有的乃至还有动画!
  窗口、控件、图像、音频视频等都称为资本(Resource),在程序中都可以运用、创立、添加、修正等。
句柄

  在Windows编程中,分歧窗口、控件、图像等都对应一个独一的数字(初学者可以了解为>  你可以将句柄了解为学号,你不需求记住先生的姓名、住址、成果等各类信息,当你需求理解这逻辑学生时,只需去教务处,将学号(句柄)通知那边的任务人员(Windows),他就可以帮你找到这个先生。
  句柄屏障了许多细节,程序员不需求理解面前的机制。例如用 CreateFile() 函数创立文件后会前往一个文件句柄,然后经过这个句柄就可以读写、删除该文件,而不需求理解Windows是若何将句柄与文件联系关系起来的,也不需求理解句柄究竟保管了哪些信息,Windows 是闭源的,这些面前的细节只要微软晓得。
Windows的音讯机制
  在普通的编程中,我们多是经过 API 函数来挪用零碎功用,让操作零碎来帮我们完成许多任务,例如挪用 CreateFile() 函数,操作零碎会帮我们创立一个文件,而不需求我们介入任何任务,十分便利。
  反过去,操作零碎也会“偷懒”,会挪用我们程序中的函数,让我们本人处置某些工作。例如用户敲击键盘,操作零碎会起首收到告诉,但它并不会处置,而是挪用程序中的函数,通知程序用户敲击了键盘,你本人处置好了;假如程序不处置,操作零碎才会停止默许的操作。
  当然,这不克不及了解为操作零碎“偷懒”,而是给我们一个时机,让我们自行处置某些工作,从而使程序愈加灵敏和强健,也让程序员有了更多发扬的空间。
  用户敲击键盘、点击鼠标、拖动窗口、选择菜单、输出文字等一切的操作都称为事情(Event)。这与我们平常了解的“事情”是相似的,都表现发作了某些状况,好的或许坏的。
  当有事情发作时,Windows 会生成一条音讯(Message),通知程序发作了什么工作。这与我们平常了解的“音讯”是相似,都表现一种传递信息的载体。
  那么,Windows 是若何经过音讯将发作的事情告诉给使用程序的呢?
  每当事情发作时,Windows 会生成一条音讯,并放到一个由零碎保护的队列中。然后,程序会本人从这个队列中获撤消息并剖析,挪用事情处置函数(处置事情的代码也就在这个函数中),对用户的操作停止呼应。
队列是一种先辈先出的数据构造,不明确的请自行Google或百度。
  留意:Windows 向队列平分派音讯和使用程序从队列中获撤消息并不是同步的,Windows 不论队列中有没有音讯,不论使用程序有没有处置终了,只需有事情发作,就会将音讯丢进队列,什么时分处置终了是使用程序的事。
  可见,音讯是衔接 Windows 和使用程序的纽带,Windows 经过音讯通知使用程序发作了什么,使用程序经过音讯晓得该做什么。
音讯构造体
  音讯其实是一个构造体,名字为 MSG,界说为:
typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG;  Windows 向队列中送达音讯,其实就是将一个类型为 MSG 的构造体变量丢进队列。
  MSG 构造体中各成员变量的寄义如下:
  1) hwnd表现音讯所属的窗口。用户普通是在程序的窗口下停止操作,所以一个音讯普通多是与某个窗口相干联的。例如在某个运动窗口中按下鼠标左键,发生的按键音讯就是发给该窗口的。
  2) message表现音讯类型,是一个数值。在Windows中,音讯是由一个数值来表现的,分歧类型的音讯对应分歧的数值。然则因为数值方便于记忆,所以Windows将音讯对应的数值界说为WM_XXX宏(WM是Window Message的缩写)的方式,XXX 对应某种音讯的英文拼写的大写方式。例如,鼠标左键按下音讯是WM_LBUTTONDOWN,键盘按下音讯是WM_KEYDOWN,字符音讯是WM_CHAR,等等。在程序中我们平日多是以WM_XXX宏的方式来运用音讯的。
  3) 第三、第四个成员变量wParam和lParam,用于指定音讯的附加信息。例如,当我们收到一个字符音讯的时分,message成员变量的值就是WM_CHAR,但用户究竟输出的是什么字符,那么就由wParam和lParam来阐明。wParam、lParam表现的信息随音讯的分歧而分歧。
  4) 最初两个变量辨别表现音讯送达到音讯队列中的工夫和鼠标的以后地位。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-525927-1-1.html 上篇帖子: 第一个真正的Windows程序 下篇帖子: 一个完好的Windows程序框架
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表