与windows编程有关的主要概念

窗口
窗口的概念很轻易了解,就是我们运用软件时看到的界面。Windows 的中心就是窗口,它是Windows一统PC操作零碎市场的杀手锏,如下图所示:

\"\"
图1:记事本程序

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

句柄
在Windows编程中,分歧窗口、控件、图像等都对应一个独一的数字(初学者可以了解为 ID),称为句柄(Handle)。经过句柄,程序可以获取对应资本的各类信息,也可以运用、修正、删除该资本。
你可以将句柄了解为学号,你不需求记住先生的姓名、住址、成果等各类信息,当你需求理解这逻辑学生时,只需去教务处,将学号(句柄)通知那边的任务人员(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) 最初两个变量辨别表现音讯送达到音讯队列中的工夫和鼠标的以后地位。

原文地址:https://blog.51cto.com/14591370/2447582

时间: 2024-10-12 01:16:40

与windows编程有关的主要概念的相关文章

Windows编程基本概念之Point、Size

[Windows编程基本概念之Point.Size] 作者:Tocy    时间:2014-09-20 Point相关概念 在二维坐标系统中,标记一个点需要两个数据就可以.通常在正交坐标系中,只要给出某个点相对坐标原点的偏移(两个方向)即可唯一确定一个点. Point在windows中定义如下: typedef struct tagPOINT { LONG x; LONG y; } POINT; 在Windows屏幕坐标系统中,坐标原点O(0,0)在屏幕左上角,x轴正方向为从左到右,y轴正方向为

C#初学笔记(Windows编程的基本概念)

Windows编程的基本概念 人机界面HCI(human-computer interface)又称用户界面UI(user interface),是人与计算机之间传递.交换信息的媒介和对话接口,是计算机系统的重要组成部分.由于大多数应用程序是以用户界面为框架的,因此界面编程是软件开发的核心编程之一. 用户界面的设计与操作系统平台有关,操作系统界面一般有两种: (1)命令行界面CLI(command line user interface),例如DOS: (2)图形用户界面GUI(graphica

有一定基础的 C++ 学习者该怎样学习 Windows 编程?

人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门不久的人来回答要好.就譬如最高票的那个回答,是一个非常精通 Windows 编程的高人回答的,但这种答案能给刚開始学习的人带来多少帮助,我这里想先打一个问号. 前段时间刚辅导了一个学生学会了 Win32 GUI 编程,刚好看到这个问题,顺手就邀请他回答了.并不是是给他布置总结作业,不过希望能从他这里

有一定基础的 C++ 学习者该如何学习 Windows 编程?

人的心理有个奇妙的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解很快就会忘得干干净净,似乎一切都是自然而然,本来就该这样的.因此,关于「如何入门」这类问题,找顶尖高手来回答,未必能比一个刚入门不久的人来回答要好.就譬如最高票的那个回答,是一个非常精通 Windows 编程的高人回答的,但这样的答案能给初学者带来多少帮助,我这里想先打一个问号. 前段时间刚辅导了一个学生学会了 Win32 GUI 编程,刚好看到这个问题,顺手就邀请他回答了.并非是给他布置总结作业,仅仅是希望能从他这里得到第

windows编程经典书籍

本人是刚刚开始学习windows编程的,感觉看雪学院的大牛很NB.想找一些书籍来看学习学习,可是不知道看哪些书好.驱动,对菜鸟们来说真是一个很深奥的话题,所以 ,我找来了这篇文章供大家分享,以后大家发现什么好书就在楼下跟贴吧! 作者:Harry Meng 来源:互联网.也许我的阅读面过于狭小,书架里基本上都是Jeffrey Richter,Charles Petzold,侯捷老师以及潘爱民老师的书,这些书一直陪伴着我,并给我的编程工作带来了很大的帮助,希望我的推荐对你也有帮助.现 在的计算机图书

windows 编程 —— 宽字符集 与 Unicode

从ASCII码 到 Unicode 双字节字符集 迄今为止,我们已经看到了256个字符的字符集(ASCII).但中国.日本和韩国的象形文字符号有大约21,000个.如何容纳这些语言而仍保持和ASCII的某种兼容性呢? 解决方案(如果这个说法正确的话)是双字节字符集(DBCS:double-byte character set).DBCS从256代码开始,就像ASCII一样.与任何行为良好的代码页一样,最初的128个代码是ASCII.然而,较高的128个代码中的某些总是跟随着第二个字节.这两个字节

如何学习Windows编程

如何学习Windows编程 来源 https://zhuanlan.zhihu.com/p/24773204 Godbird 北京爱奇艺科技有限公司 客户端工程师  编辑于 2017-01-08 有很多初入门的小朋友跟我说,他们想学“底层”的技术,因为觉得技术含量高,所以想学Windows C++开发,看着调用一个个的参数超级多,调用起来超级麻烦的Windows API,觉着很酷.于是我念头一转,就有了这篇文章,根据我多年来做Windows 客户端的经验,跟大家谈谈Windows C++,该从哪

【Windows编程】系列第十篇:文本插入符

大家知道,在使用微软的编程环境创建工程时会让你选择是控制台模式还是Windows应用程序.如果选择控制台的console模式,就会在运行时出现一个黑洞洞的字符模式窗口,里面就有等待输入一闪一闪的插入符.输入光标从DOS时代就存在,但是在Win32中赋予了更强大的功能.下图就是Windows的CMD窗口,其中的输入点就是插入光标: 要注意的是这里的插入符或插入光标并不是Windows中另外一个"光标",这里是指示插入字符的位置,而不是用于鼠标,手写输入等可以定位.移动的光标(Cursor

【Windows编程】系列第九篇:剪贴板使用

 上一篇我们学习了常见的通用对话框,本篇来了解剪贴板的使用,它常用于复制粘贴功能. 剪贴板是Windows最早就加入的功能,由于该功能非常实用,我们几乎每天都会使用到.通过剪贴板,我们就可以将数据从一个应用程序传递到另一个应用程序,是一种简单的进程间通信. 许多文档处理软件都有复制.剪切.粘贴功能,这些都是用Windows剪贴板实现的,当然我们也可以在我们的程序中实现自己的剪贴板功能,本篇我们就来实现自己的剪贴板.使用剪贴板时,都是先把源数据先传到剪贴板上,再在需要的时候从剪贴板传输到目的处