Windows程序运行原理
更新时间:2023-05-19 22:03:01 阅读量: 实用文档 文档下载
Windows程序 内部运行原理主讲人:孙鑫
Windows应用程序,操作系统,计 算机硬件之间的相互关系应用程序 ③ ④ 操作系统 ① ② 消息队列
输入输出设备
关于API向下的箭头③表示应用程序可以通知操作系统执行某 个具体的动作,如操作系统能够控制声卡发出声音, 但它并不知道应该何时发出何种声音,需要应用程序 告诉操作系统该发出什么样的声音。这个关系好比有 个机器人能够完成行走的功能,但是,如果人们不告 诉它往哪个方向上走,机器人是不会主动行走的。这 里的机器人就是操作系统,人们就是应用程序。
关于API那么,应用程序是如何通知操作系统执行某个功能的呢? 有过编程经验的读者都应该知道,在应用程序中要完成某 个功能,都是以函数调用的形式实现的,同样,应用程序 也是以函数调用的方式来通知操作系统执行相应的功能的。 操作系统所能够完成的每一个特殊功能通常都有一个函数 与其对应,也就是说,操作系统把它所能够完成的功能以 函数的形式提供给应用程序使用,应用程序对这些函数的 调用就叫做系统调用,这些函数的集合就是Windows操作 系统提供给应用程序编程的接口(Application Programming Interface),简称Windows API。如CreateWindow就是一个API 函数,应用程序中调用这个函数,操作系统就会按照该函 数提供的参数信息产生一个相应的窗口。
关于消息及消息队列向上的箭头④表示操作系统能够将输入设备的变化上传给应 用程序。如用户在某个程序活动时按了一下键盘,操作系统 马上能够感知到这一事件,并且能够知道用户按下的是哪一 个键,操作系统并不决定对这一事件如何作出反应,而是将 这一事件转交给应用程序,由应用程序决定如何对这一事件 作出反应。好比有个蚊子叮了我们一口,我们的神经末梢 (相当于操作系统)马上感知到这一事件,并传递给了我们 的大脑(相当于应用程序),我们的大脑最终决定如何对这 一事件作出反应,如将蚊子赶走,或是将蚊子拍死。对事件 作出反应的过程就是消息响应。
关于消息及消息队列操作系统是怎样将感知到的事件传递给应用程序的呢? 这是通过消息机制(Message)来实现的。操作系统将每 个事件都包装成一个称为消息的结构体MSG来传递给 应用程序,参看MSDN。 MSG结构定义如下: typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG;
关于句柄
句柄(HANDLE),资源的标识。操作系统要管理和操作这些资源
,都是通 过句柄来找到对应的资源。按资源的类型, 又可将句柄细分成图标句柄(HICON), 光标句柄(HCURSOR),窗口句柄 (HWND),应用程序实例句柄 (HINSTANCE)等等各种类型的句柄。操 作系统给每一个窗口指定的一个唯一的标 识号即窗口句柄。
从变量的类型区分变量的用途int x,y; x=30; y=30; //x和y既可以用来表示坐标点,也可以用来表示宽度和 高度,还可以用来表示身高和体重。 typedef int WIDTH typedef int HEIGHT WIDTH x; HEIGHT y; //好处:我们从变量的类型上就可以知道x和y是用来表 示宽度和高度。
WinMain函数
Windows程序的入口函数
int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state );
窗口的创建创建一个完整的窗口需要经过下面四个操 作步骤: 设计一个窗口类; 注册窗口类; 创建窗口; 显示及更新窗口。
设计窗口类typedef struct _WNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; } WNDCLASS;
窗口类的类型在我们的程序中经常要用到一类变量,这个变量里的每一位(bit) 都对应某一种特性。当该变量的某位为1时,表示有该位对应的那 种特性,当该位为0时,即没有该位所对应的特性。当变量中的某 几位同时为1时,就表示同时具有几种特性的组合。一个变量中的 哪一位代表哪种意义,不容易记忆,所以我们经常根据特征的英 文拼写的大写去定义一些宏,该宏所对应的数值中仅有与该特征 相对应的那一位(bit)为1,其余的bit都为0。我们使用goto definition就能发现CS_VREDRAW=0x0001, CS_HREDRAW=0x0002,CS_DBLCLKS =0x0008, CS_NOCLOSE=0x0200。他们的共同点就是只有一位为1,其余位 都为0。如果我们希望某一变量的数值既有CS_VREDRAW特性, 又有CS_HREDRAW特性,我们只需使用二进制OR(|)操作符将 他们进行或运算相组合,如style=CS_VREDRAW | CS_HREDRAW | CS_NOCLOSE。如果我们希望在某一变量原有的几个特征上去 掉其中一个特征,用取反(~)之后再进行与(&)运算,就能够 实现,如在刚才的style的基础上去掉CS_NOCLOSE特征,可以用 style & ~CS_NOCLOSE实现。
窗口过程函数第二个成员变量lpfnWndProc指定了这一类型窗口的过程 函数,也称回调函数。回调函数的原理是这样的,当应 用程序收到给某一窗口的消息时(还记得前面讲过的消 息通常与窗口相关的吗?),就应该调用
某一函数来处 理这条消息。这一调用过程不用应用程序自己来实施, 而由操作系统来完成,但是,回调函数本身的代码必须 由应用程序自己完成。对于一条消息,操作系统到底调 用应用程序中的哪个函数(回调函数)来处理呢?操作 系统调用的就是接受消息的窗口所属的类型中的 lpfnWndProc成员指定的函数。每一种不同类型的窗口都 有自己专用的回调函数,该函数就是通过lpfnWndProc成 员指定的。
窗口过程函数举例:汽车厂家生产汽车好比应用程序创建窗口, 用户使用汽车好比操作系统管理窗口,某种汽车在 销售前就指定好了修理站(类似回调函数),当用 户的汽车出现故障后(类似窗口收到消息),汽车 用户(类似操作系统)自己直接找到修理站去修理, 不用厂家(类似应用程序)亲自将车送到修理站去 修理,但修理站还得由厂家事先建造好。
正在阅读:
Windows程序运行原理05-19
大跨度结构整体滑移技术 - 图文06-21
10谷城县詹统宗谱六代人口普查登记表04-14
倘若不曾深刻地进入,又怎能清醒地离开?06-12
2016-2017年度上半学期幼儿园卫生保健工作计划执行方案11-02
IABP-操作小册 - 图文09-12
2015年二级建造师考试试题及答案解析《市政实务》网友版410-18
小学生寒假学习计划范文7篇-寒假计划12-11
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 原理
- 运行
- Windows
- 程序
- 26个英文字母书写标准及练习本-A4打印
- 分区助手使用教程
- 中国电信市场“波特五力模型”分析
- 班级管理目标与内容2
- 电磁组竞赛车模路径检测设计参考方案
- 关于高二生活的英语作文带翻译
- 八年级上册期末政治复习提纲(三四单元知识点整理)
- 市场调查全书笔记(第一遍复习)
- 浅谈如何抓好新形势下消防部队安全防事故工作
- 2011安溪县科目一货车仿真试题
- 高中历史中外历史人物评说选修4复习资料
- 2016-2022年中国3D电视行业市场调查与投资战略咨询报告
- 农行员工违反规章制度处理办法
- 于宝刚-中国企业如何进行资本运作01
- 曾国藩为人处世之道
- 语文(人教版)九年级上册复习资料集锦(10页)
- 第3章 可编程控制器基本指令
- 初三英语复习专题--短文填空综合题
- 实验四报告燃烧热的测定
- 第六届黄河杯全国文学艺术作品大奖赛征稿启事