手机版

windows+SDK编程入门介绍

发布时间:2024-11-17   来源:未知    
字号:

windows+SDK编程入门介绍

Visual C++在 Windows应用程序上 的编程方法仍可分 为两类:

非Window编程,如控制台程序(一种与早 期DOS相兼容的程序,用来学习基本C++ 的编程思想)直接调用Windows提供的Win32 API(应 用程序接口)函数开发Windows应用程序 ,像《Windows程序设计》(第五版)该 书所讨论的就是这种方式

Window编程

用Visual C++所提供的MFC(Microsoft C++所提供的 所提供的MFC(Microsoft Class,微软基础类) Foundation Class,微软基础类)库中 及其功能函数。由于MFC MFC对 的"类"及其功能函数。由于MFC对Win32 API编程方式的极好地封装 编程方式的极好地封装, API编程方式的极好地封装,使得我们 甚至不需要理解Windows Windows内部编程机制 甚至不需要理解Windows内部编程机制 就可以通过"应用程序向导" 就可以通过"应用程序向导"创建相应的 应用程序框架, 应用程序框架,这些框架能满足绝大多 数开发者的需求, 数开发者的需求,并且使得我们不必添 加太多的代码就能实现最常用的程序功 因此,MFC是 C++中影响最 能。因此,MFC是Visual C++中影响最 深的一种编程方式, 深的一种编程方式,并且这个编程方式 将会一直影响下去。 将会一直影响下去。

windows+SDK编程入门介绍

Windows应用程序的特点 Windows应用程序的特点Windows之所以取得成功,主要在于它具有以下优点: 直观、高效的面向对象的图形用户界面,易学易用: 从某种意义上说,Windows用户界面和开发环境都是面向对象的。用户采用“选 择对象-操作对象”这种方式进行工作。比如要打开一个文档,我们首先用鼠标或键 盘选择该文档,然后从右键菜单中选择“打开”操作,打开该文档。这种操作方式 模拟了现实世界的行为,易于理解、学习和使用。 用户界面统一、友好、漂亮: Windows应用程序大多符合IBM公司提出的CUA (Common User Acess)标准,所有 的程序拥有相同的或相似的基本外观,包括窗口、菜单、工具条等。用户只要掌握 其中一个,就不难学会其他软件,从而降低了用户培训学习的费用。 丰富的设备无关的图形操作:Windows的图形设备接口(GDI)提供了丰富的图形操作函数,可以绘制出诸如线、圆、框等 的几何图形,并支持各种输出设备。设备无关意味着在针式打印机上和高分辨率的显示器上都 能显示出相同效果的图形。 Windows程序的所有输出都是图形。

windows+SDK编程入门介绍

GDI(Graphics Device Interface): 图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows 程序的图形输出。 GDI+ 和传统的GDI不同,GDI+中引入了对COM(组件对象模型)技术的支持,通过COM技术,GDI+ 简化了对图像文件的访问(打开、保存)。GDI+是由.NET Framework中的system.drawing命名 空

间提供的一组类,它使开发人员可以利用Windows内置的图形功能轻松地创建图形应用程序 。 OpenGL(Open Graphics Library) OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。

windows+SDK编程入门介绍

多任务: Windows是一个多任务的操作环境,它允许用户同时运行多个应用程序,或在一个 程序中同时做几件事情。每个程序在屏幕上占据一块矩形区域,这个区域称为窗口 ,窗口是可以重叠的。用户可以移动这些窗口,或在不同的应用程序之间进行切换 ,并可以在程序之间进行手工和自动的数据交换和通信。 虽然同一时刻计算机可以运行多个应用程序,但仅有一个是处于活动状态的,其 标题栏呈现高亮颜色。一个活动的程序是指当前能够接收用户键盘输入的程序。 丰富的用户界面对象Windows支持丰富的用户接口对象,包括:窗口、图标、菜单、对话框等等。程序员只需简 单的几十行代码,就可以设计出一个非常漂亮的图形用户界面。而在DOS环境下,则需要大量 的代码来完成同样的工作,而且效果也没有Windows提供的那么好。

windows+SDK编程入门介绍

Windows应用程序是事件驱动(或称作消息驱动) Windows应用程序是事件驱动(或称作消息驱动)的 应用程序是事件驱动 传统的MS-DOS程序主要采用顺序的、关联的、过程驱动的程序设计方法。一 个程序是一系列预先定义好的操作序列的组合,它具有一定的开头、中间过程和 结束。程序直接控制程序事件和过程的顺序。这样的程序设计方法是面向程序而 不是面向用户的,交互性差,用户界面不够友好,因为它强迫用户按照某种不可 更改的模式进行工作。 事件驱动程序设计是一种全新的程序设计方法,它不是由事件的顺序来控制 ,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预 定的顺序,这样就允许程序的的用户用各种合理的顺序来安排程序的流程。对于 需要用户交互的应用程序来说,事件驱动的程序设计有着过程驱动方法无法替代 的优点。它是一种面向用户的程序设计方法,它在程序设计过程中除了完成所需 功能之外,更多的考虑了用户可能的各种输入,并针对性的设计相应的处理程序 。它是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件 状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态。

windows+SDK编程入门介绍

资源共享对于DOS程序来说,它运行时独占系统的全部资源,包括显示器、内存等,在程序结束时 才释放资源。而Windows是一个多任务的操作系统,各个应用程序共享系统提供的资源,常见 的资源包括:设备描述表,画刷,画笔,字体,对话框控制,对话框,

图标,定时器,插入符 号,通信端口,电话线等。 Windows要求应用程序必须以一种能允许它共享Windows资源的方式进行设计,它的基本模式 是这样的: 1.向Windows系统请求资源;2.使用该资源;3.释放该资源给Windows以供别的程序使用。即使 最有经验的Windows程序员也常常会忽略第三步。如果忽略了这一步,轻则当时不出错,但过 一会儿出现程序运行出现异常情况,或干扰别的程序正常运行;重则立即死机,比如设备描述 表对象没有释放时。 在Windows应用程序设计中,CPU也是一种非常重要的资源,因此应用程序应当避免长时 间的占用CPU资源(如一个特别长的循环);如果确实需要这样做,也应当采取一些措施,以 让程序能够响应用户的输入。主存也是一个共享资源,要防止同时运行的多个应用程序因协调 不好而耗尽内存资源。 应用程序一般不要直接访问内存或其他硬件设备,如键盘、鼠标、计数器、屏幕或串口、 并口等。Windows系统要求绝对控制这些资源,以保证向所有的应用程序提供公平的不中断的 运行。如果确实要访问串并口,应当使用通过Windows提供的函数来安全的访问。

windows+SDK编程入门介绍

事件和消息事件: 事件: 比较常见的例如:鼠标事件,包含鼠标移动、鼠标点击、鼠标位于窗口的位置 等。而应用程序打开后,在那里静静地等待,等待各种事件发生,然后进行相应 的处理,执行特定的功能。事件也可以由用户来定义,例如:某段程序处理完毕 也可以作为一个事件。 消息: 消息: 一条消息是关于发生事件的信息。例如:一个键或鼠标按钮被按下,就发生一个 消息;而当松开时,另一个消息又发生了。消息的产生也不仅仅来源于键盘和鼠标 的,消息可由应用程序本身产生,也可由运行的其它应用程序产生,还可以由用户 或Windows产生,每当事件发生时,Windows做出记录并将相应的消息分配到有关的 应用程序中去。 消息实际上就是一个整型值.如果你查看一下你的头文件的话(当你去调查 API的工作机制的话,这是一个非常好的也是大多数人都有的习惯)你就发现下面这些 东西: #define WM_INITDIALOG 0x0110 #define WM_COMMAND #define WM_LBUTTONDOWN 0x0111 0x0201

windows+SDK编程入门介绍

Windows应用程序的消息来源有以下四种: 应用程序的消息来源有以下四种: 应用程序的消息来源有以下四种 (1)输入消息:包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然 后由Windows将它们送入应用程序消息队列中,由应用程序来处理消息。 (2)控制消息:用来与Windows的控制对象,如列表框、按钮、检查框等进行双向 通信。当用户在列表框中改动当前选择或改变了检查框的状态时发出此

类消息。这 类消息一般不经过应用程序消息队列,而是直接发送到控制对象上去。 (3)系统消息:对程序化的事件或系统时钟中断作出反应。一些系统消息,象DDE 消息(动态数据交换消息)要通过Windows的系统消息队列,而有的则不通过系统消 息队列而直接送入应用程序的消息队列,如创建窗口消息。 (4)用户消息:这是程序员自己定义并在应用程序中主动发出的,一般由应用程序 的某一部分内部处理。 Windows操作系统包括三个内核基本元件:GDI, KERNEL ,USER。其中GDI(图形设备 接口)负责在屏幕上绘制像素、打印硬拷贝输出,绘制用户界面包括窗口、菜单、对 话框等。系统内核KERNEL支持与操作系统密切相关的功能:如进程加载,文本切换 、文件I/O,以及内存管理、线程管理等。USER为所有的用户界面对象提供支持,它 用于接收和管理所有输入消息、系统消息并把它们发给相应的窗口的消息队列。消 息队列是一个系统定义的内存块,用于临时存储消息;或是把消息直接发给窗口过 程。每个窗口维护自己的消息队列,并从中取出消息,利用窗口函数进行处理。框图如下:

windows+SDK编程入门介绍

window procedure

系统消息队列

应用程序消息队列 用户产生事件,由操作系统捕捉到该事件, 用户产生事件,由操作系统捕捉到该事件,并 把相应事件的消息存入系统消息队列, 把相应事件的消息存入系统消息队列,再把它 们发到相应的窗口的消息队列中

windows+SDK编程入门介绍

Windows是一个多任务的操作系统,也就是说,在同一时刻,在Windows中有着多个应 用程序的实例正在运行,比如说这时我正在打开字处理软件Word来编写这本书的书稿,同 时,还打开了Visual C++的集成开发环境Microsoft Developer Studio来调试书中的示例 程序,而且,后台还在放着歌曲。在这样的一个操作系统中,不可能像过去的DOS那样,由 一个应用程序来享用所有的系统资源,这些资源是由Windows统一管理的。那么,特定的应 用程序如何获得用户输入的信息呢?事实上,Windows时刻监视着用户的一举一动,并分析 用户的动作与哪一个应用程序相关,然后,将用户的动作以消息的形式发送给该应用程序 ,应用程序时刻等待着消息的到来,一但发现它的消息队列中有未处理的消息,就获取并 分析该消息,最后,应用程序根据消息所包含的内容采取适当的动作来响应用户所作的操 作。举一个例子来说明上面的问题,假设我们编了一个程序,该程序有一个File菜单,那 么,在运行该应用程序的时候,如果用户单击了File菜单,这个动作将被Windows (而不是 应用程序本身!)所捕获,Windows经过分析得知这个动作应该由上面所说的那个应

用程序 去处理,既然是这样,Windows就发送了个叫做WM_COMMAND的消息给应用程序,该消息所包 含的信息告诉应用程序:“用户单击了File菜单”,应用程序得知这一消息之后,采取相 应的动作来响应它,这个过程称为消息处理。Windows为每一个应用程序(确切地说是每一 个线程)维护了相应的消息队列,应用程序的任务就是不停的从它的消息队列中获取消息, 分析消息和处理消息,直到一条接到叫做WM_QUIT消息为止,这个过程通常是由一种叫做消 息循环的程序结构来实现的。

windows+SDK编程入门介绍

下图给出了一般Windows应用程 序的执行流程。

从某种角度上来看,Windows应用程序是由一系列的消息处理代码来实现的。这和传统的过 程式编程方法很不一样,编程者只能够预测用户所利用应用程序用户界面对象所进行的操作以及 为这些操作编写处理代码,却不可以知道这些操作在什么时候发生或者是以什么顺序来发生,也 就是说,我们不可能知道什么消息会在什么时候以什么顺序来临。

windows+SDK编程入门介绍

SDK编程 SDK编程 Windows APIAPI,全称application program interface,意思是应用程序编程接口(说起API并不仅仅指 windows而言,windows支持的API叫winapi)。winapi就是应用程序和windows之间通讯的一个编 程界面。windows提供了上千个API函数,以方便程序员来编写应用程序。做数据库管理系统是 很少和API打交道的,像PB、VB等。总之,进行系统编程,API是必不可少的。API是每个VC高手 的必过的一关。 Windows API具有两种基本类型:Win16 API和Win32 API。两者在很多方面非常相像,但是 Win32 API除了几乎包括了Win16 API中的所有内容以外,还包括很多的其它内容。Windows API 依靠三个主要的核心组件提供Windows的大部分函数,在Win16和Win32中,它们具有不同的名称 ,如表3. 1 Win16和Win32的核心组件:Win16 API USER.EXE Win32 API USER32.DLL 说明 负责窗口的管理,包括 消息、菜单、光标、通 信、计时器和其它与控 制窗口显示 提供图形设备接口,管 理用户界面和图形绘制 ,包括Windows元文件 、位图、设备描述表和 字体等 处理存储器低层功能、 任务和资源管理等 Windows核心服务

GDI.EXE

GDI32.DLL

KRNL386.EXE

KERNEL32.DLL

windows+SDK编程入门介绍

虽然Win16 API组件带有.EXE的扩展名,但是它们事实都是动态链接库(.DLL),不能单独运 行。其它一些非核心的Windows API由其它组件所提供的DLL来实现,这些组件包括通用对话框 、打印、文件压缩、版本控制以及多媒体支持等。

Windows SDK大致说来Windows编程有两种方法: 1.Windwos C方式 SDK) 方式( 1.Windwos C方式(SDK) 2.C++方式:即对SDK函数进行包装, VC的MFC,BCB的OWL等 下去, 2.C++方式:即对SDK函数进行包装,如VC的MFC,BCB的OWL等,如果

要深入 下去,还是要熟 方式 SDK函数进行包装 SDK。 悉SDK。 两种方法有哪些区别呢:SDK编程就是直接调用windows的API进行编程,但是有上千个API 组成(win95的API有两千多个),这种数目太大了,对于编程显然不利。而MFC把这些API封 闭起来,共有一百多个类组成。一般只需20多个windows类和另外20多个通用的非windows 类就可“干活”了,这一改变无疑是有很大好处的。尽管MFC如此方便,但是要学VC,直接 去学MFC却是不明智的选择。只有在熟悉了MFC的运行机制的情况下,才有可能深入下去。 那些如多少天精通什么什么的书籍其实讲的全是些如怎么使用VC这种工具的话题,学来学去 学会了怎么会使用VC这种工具,而不能深入MFC编程。

windows+SDK编程入门介绍

WinSDK程序设计 WinSDK程序设计就是API方式的windows程序设计。SDK,全称Software Developers Kit,意思是 软件开发工具箱。它是在windows程序设计早期,程序员进行windows程序设计所必 须购买的一个软件包。开始进行WinSDK编程用C语言最好,可以撇开C++的特性专心 熟悉一下Win32编程的思路以及了解windows的消息运行机制。等把这些有所了解后 ,慢慢转向C++和MFC编程。不过我的观点是WinSDK编程永远要慢慢进行下去,直接 接触底层代码对MFC源码的理解是有很大好处的。 该工具包的最新版本就是我们正在使用的Win32 SDK,在安装了Visual C++的同 时,Win32 SDK也安装到你的计算机上了。尽管MFC提供了对Win32 API的比较完整的 封装,但是,在某些情况下,我们更倾向于直接调用Win32 API,因为这有时候可以 获得更高的效率,并且有着更大的自由度。而且,使用MFC编写的新风格的Windows 应用程序的工作方式基本上与使用SDK编写的同一程序一样,它们往往有着很多的共 同之处,只是使用MFC更加的方便,因为它隐藏了大量的复杂性。 前面提到过,面向对象的编程方式是当前最流行的程序设计方法,但是,Win32 API本身却是基于C语言的过程式编程的,SDK和MFC的最主要的不同之处也就是以C与 C++之间的差别,使用MFC进行Windows应用程序设计需要面向对象的编程思想和方法 。

windows+SDK编程入门介绍

一个简单的SDK应用程序 一个简单的SDK应用程序 SDK

for example: 第五讲 第五讲/hello_sdk.sln

(1) 单击"开始"页面中的"新建项目",或者打开"文件"菜单中的"新建",选择"项目"命令, 都将弹出"新建项目"对话框。 (2) 在左侧的"项目类型"窗格中,选中"Visual C++项目"。在右侧的"模板"窗格中,拖动窗 格右侧的滚动条显示其他模板,然后选中"Win32 项目"。 (3) 在"名称"文本框中,输入项目名称“hello_sdk",单击"确定"按钮,弹出"Win32 应用 程序向导"对话框。 (4) 单击左侧的"应用程序设置"。选中"应用程序类型"中的

"Windows 应用程序",在"附加 选项"中选中"空项目",单击"完成"按钮。

windows+SDK编程入门介绍

几个要点理解: 几个要点理解: 1. Windows数据类型 数据类型在下表中列出的数据类型许多并不是标准C/C++数据类型,而是相当特殊的 Windows头文件中定义的数据类型。例如,COLORREF是一个Windows数据类型 ,用于存放24位RGB颜色值;BOOL是存储TRUE/FALSE值的一个布尔数据类型 ;而DWORD是一个32位无符号整数。过一段时间,你会想了解C/C++标准数据 类型一样,掌握这些数据类型。Windows中所用的数据类型 中所用的数据类型 BOOL BSTR BYTE COLORREF DWORD LONG LPARAM 对应的基本数据类型 int unsigned short * unsigned char unsigned long unsigned long long long 说明 布尔值 32位字符指针 位字符指针 8位无符号整数 位无符号整数 用作颜色值的32位值 用作颜色值的32位值 32 32位无符号整数,段地址和相关的偏移地址 位无符号整数, 位无符号整数 32位带符号整数 位带符号整数 作为参数传递给窗口过程或回调函数的32位 作为参数传递给窗口过程或回调函数的32位 32 值

windows+SDK编程入门介绍.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)