WindowsSDK入门浅谈Word格式.docx

上传人:b****3 文档编号:7302115 上传时间:2023-05-08 格式:DOCX 页数:20 大小:27.42KB
下载 相关 举报
WindowsSDK入门浅谈Word格式.docx_第1页
第1页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第2页
第2页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第3页
第3页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第4页
第4页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第5页
第5页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第6页
第6页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第7页
第7页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第8页
第8页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第9页
第9页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第10页
第10页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第11页
第11页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第12页
第12页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第13页
第13页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第14页
第14页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第15页
第15页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第16页
第16页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第17页
第17页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第18页
第18页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第19页
第19页 / 共20页
WindowsSDK入门浅谈Word格式.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

WindowsSDK入门浅谈Word格式.docx

《WindowsSDK入门浅谈Word格式.docx》由会员分享,可在线阅读,更多相关《WindowsSDK入门浅谈Word格式.docx(20页珍藏版)》请在冰点文库上搜索。

WindowsSDK入门浅谈Word格式.docx

考虑一下用一个printf函数显示一个字符串的过程。

显然这个函数不是你自己写的。

或许你听说过C-RuntimeLibrary,C运行时库,没错,你的程序只有依靠它才能运行。

printf的代码就在C运行时库中,因此你可以轻松的调用它而不管它是怎么实现的。

但是,C运行时库也会调用一些别的函数,这些函数是由操作系统提供的,称为中断服务程序,而操作系统的中断服务程序会进一步的调用BIOS中断服务程序。

可以看出,程序的运行是由一层一层的服务支撑起来的。

在这里面,操作系统担当了非常重要的角色。

它提供了程序员可以直接使用的例程,也可以称为ApplicationProgrammingInterface(应用程序编程界面,API)。

Dos中一般没有API的说法,Dos的编程界面是由中断服务程序充当。

在Windows中编程就要常常和API打交道。

32位Windows的API有2000多个,一方面它提供了功能强大的编程界面,另一方面它使初学者望而却步。

Windows操作系统基本常识

  Windows是一个单用户多任务图形化操作系统。

所谓单用户,指同时只能由一个用户(一个人)通过Windows系统操作电脑;

所谓多任务,指同时可以有多个进程并发执行。

既然Windows系统有这些特点,那么Windows编程就会体现这些特点。

为了做到多任务,Windows程序使用消息机制,有我的消息我才干活,没我的消息就把CPU让给别人;

为了做到图形化,Windows程序必须显示窗口并自己绘制客户区,就连显示字符串也必须画到客户区上。

还有一点,Windows广泛使用动态链接。

Windows的API就放在动态链接库中,以供程序运行时调用。

在Windows98中有32位的gdi32.dll,user32.dll,kernel32.dll和16位的gdi.exe,user.exe,krnl386.exe,API就存在于这些动态链接库中。

微软每推出一个重要的windows版本,一般都会同时推出一个SDK(SoftwareDevelopmentKit)。

SDK包含了开发该windows版本所需的windows函数和常数定义、API函数说明文档、相关工具和示例。

SDK一般使用C语言,但不包括编译器。

高版本VC++包括了SDK所有的头文件、帮助、示例和工具,不需要再安装SDK,低版本如VC++5.0则需要安装SDK。

从windows98开始,windowsSDK叫PlatformSDK(API函数的有关声明、例子。

  用VC编写windows程序有两种方式:

windowsc方式(SDK)和C++方式(对SDK函数进行包装,如VC中的MFC、BCB中的VCL)。

SDK编程就是直接用windowsAPI进行编程。

API由上千个API函数组成(win95中有两千多个),而MFC是API的封装,结合面向对象的继承、多态组成一个个类,共有一百多个类组成。

  SDK是SoftwareDevelopmentKit的缩写,中文意思是“软件开发工具包”。

这是一个覆盖面相当广泛的名词,可以这么说:

辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。

具体到我们这个系列教程,我们后面只讨论广义SDK的一个子集——即开发Windows平台下的应用程序所使用的SDK。

  其实上面只是说了一个SDK大概的概念而已,理解什么是SDK真有这么容易吗?

恐怕没这么简单!

为了解释什么是SDK我们不得不引入API、动态链接库、导入库等等概念。

^_^,不要怕,也就是几个新的名词而已,我也是到了大学快结束的时候才体会到其实学习新知识就是在学习新名词、新概念和新术语。

  首先要接触的是“API”,也就是ApplicationProgrammingInterface,其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的API而使操作系统去执行应用程序的命令(动作)。

其实早在DOS时代就有API的概念,只不过那个时候的API是以中断调用的形式(INT21h)提供的,在DOS下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比如将AH置为30h后调用INT21h就可以得到DOS操作系统的版本号。

而在Windows中,系统API是以函数调用的方式提供的。

同样是取得操作系统的版本号,在Windows中你所要做的就是调用GetVersionEx()函数。

可以这么说,DOSAPI是“Thinkingin汇编语言”的,而WindowsAPI则是“Thinkingin高级语言”的。

DOSAPI是系统程序的一部分,他们与系统一同被载入内存并且可以通过中断矢量表找到他们的入口,那么WindowsAPI呢?

要说明白这个问题就不得不引入我们下面要介绍得这个概念——DLL。

  DLL(又是一个缩写,感觉IT这个行业里三字头缩写特别多),即DynamicLinkLibrary(动态链接库)。

我们经常会看到一些.dll格式的文件,这些文件就是动态链接库文件,其实也是一种可执行文件格式。

跟.exe文件不同的是,.dll文件不能直接执行,他们通常由.exe在执行时装入,内含有一些资源以及可执行代码等。

其实Windows的三大模块就是以DLL的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了API函数的执行代码。

为了使用DLL中的API函数,我们必须要有API函数的声明(.H)和其导入库(.LIB),函数的原型声明不难理解,那么导入库又是做什么用的呢?

我们暂时先这样理解:

导入库是为了在DLL中找到API的入口点而使用的。

  所以,为了使用API函数,我们就要有跟API所对应的.H和.LIB文件,而SDK正是提供了一整套开发Windows应用程序所需的相关文件、范例和工具的“工具包”。

到此为止,我们才真正的解释清楚了SDK的含义。

  由于SDK包含了使用API的必需资料,所以人们也常把仅使用API来编写Windows应用程序的开发方式叫做“SDK编程”。

而API和SDK是开发Windows应用程序所必需的东西,所以其它编程框架和类库都是建立在它们之上的,比如VCL和MFC,虽然他们比起“SDK编程”来有着更高的抽象度,但这丝毫不妨碍它们在需要的时候随时直接调用API函数。

  

说说SDK

  时下学计算机的大多想学编程,且大部分都是在Windows下工作的,而目前学得最热门的是VC,大多数人一开始就开始学习VC,VC是以C++为语言基础的开发工具,而C++是C语言的扩充,故要学好VC最好是先学好C和C++。

  用VC编写Windows程序有两种:

1.Windowsc方式(SDK),2.C++方式:

即对SDK函数进行包装,如VC的MFC,BCB的VCL等。

SDK编程就是直接调用Windows的API进行编程,平时人们常说"

用SDK写程序"

就是指用Windows的API函数来写程序,API由上千个API函数组成(Win95的API有两千多个)。

而MFC是API的封闭,结合面向对象程序设计的继承性和多态性组成一个个的"

类"

,共由一百多个类组成。

尽管MFC比SDK方便,但要深入VC,直接去学MFC却是不明智的选择。

只有在熟悉了MFC的运行机制的情况下,才有可能深入下去。

所以学VC最好是先学用SDK编写程序,在此期间掌握Windows操作系统的工作原理和各API函数的应用,然后再深入MFC。

  编程环境

  我们仍然用VC6的IDE(集成开发环境)来编写SDK程序,启动VC6后选择File菜单的New...选项,在出现的New对话框的Projects标签内选择Win32Application,然后在ProjectsName指定项目的名字,在Location中指定路径后按OK按钮,在出现的对话框中,如果你想要用C语言来写程序可以选择Anemtpyproject,如果你想创建一个带有WinMain入口函数和普通参数的设定的项目,可以选择AsimpleWin32application,如果您想创建一个简单典型的“HelloWorld!

”Win32SDKapplication应用程序,可以选择Atypical"

HelloWorld!

"

application。

确定项目类型后按Finish完成。

  在VC6环境下,你依然可以使用资源编辑器和ClassWizar等工具完成程序的编写。

用SDK编写程序关键是能够了解程序的来龙去脉。

如果不了解,当然那样效率会很低,不比VB、PB那么快,任何东西都是有得有失,如你熟悉用SDK写程序后,对MFC会比较容易上手的,关键要熟悉C++的三大特性。

SDK即softwaredevelopekit(软件开发工具包),它包含了进行Windows软件开发的文档和API函数的输入库、头文件(因为API在动态链接库中,这些动态链接库是系统的组成部分因此不用再提供,而输入库和头文件则必须,这样才能在你的程序中使用API函数)。

早期SDK是一个单独发放的包,现在在VisualC++和其他一些开发环境中已经包含了它。

如果你已经安装了VC++那么就可以开始编写Windows程序了。

随着Windows系统的发展,SDK的内容越来越多,我们只要抓住最基本的方面。

至于其他专门的主题,就根据自己的兴趣和技术方向进一步学习了。

  如果你已经开始,你的教材应该是那本经典的programmingwindows(petzold)或者是一本相似的书。

但无论哪本书,一开始你都会面对一个基本的WindowsSDK程序,这个程序有几十行。

尽管也不算长,但比C版的helloworld长多了。

更糟的是,里面充斥着奇怪的变量类型和常量定义,不过先不用被它吓住,让我们看看这里面有些什么。

首先会有一个#include<

windows.h>

,嗯,没什么奇怪的,这和#inclde<

stdio.h>

没什么两样。

然后是一个函数声明:

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

有点困惑了,一下子就出来了好几个“生词”,而且函数名前面有两个修饰符也是以前没有遇到的。

好在我们还可以辨认出这是一个函数声明。

再往下看是WinMain函数,又是一堆生词,我猜想你可能已经开始郁闷了。

想一遍看懂这个程序确实困难,所以看不懂也没关系。

看不下去了可以看看书上的讲解。

这篇文章并不是要完整分析这个程序的,hfire不可能有petzold讲的好。

在这里hfire帮你分析一下一些陌生的东西。

  首先说Windows的数据类型。

尽管这些数据类型看上去很陌生,其实它们是由C的基本数据类型define的。

比如UINT就是unsingedint,PSTR就是pointertostring的意思,猜猜就知道是char*。

Windows还有很多系统定义的结构体,比如WNDCLASS,MSG等,这些东西见的多了就自然明白了。

Windows还有一个重要的概念,句柄。

通过句柄就可以操作Windows对象。

HWND,HINSTANCE,HDC等都是句柄。

  再说说Windows程序的结构。

一般有一个WinMain函数作为程序的入口点,在WinMain里面定义窗口类,进行消息循环。

消息循环就是那个普通的while循环,在其中接收消息、分发消息。

然后是窗口函数WndProc,名字可以自己定。

在其中用一个大的switch结构检索消息,在每个case下面写处理消息的代码。

最简单的WindowsSDK程序只要写这两个函数就够了。

等你的程序写长了,就要把特定的消息处理代码写成函数,以便在处理消息时调用,甚至你可以使用C++来写程序。

等你熟悉这种结构以后,就可以任意发挥了。

  其他的不想说太多,学SDK很重要的是不要期望在开始时把每行代码都搞清楚。

  当然是多写程序了。

最好每个主题都写一个。

从一开始的窗口,文本显示到图形显示、控件、对话框,多写就能领会Windows编程的内涵。

当第一部分学的差不多了,可以写一个综合点的程序。

最后你会发现你可以写很长的程序了,1000多行也不算长,但对于当时学C时是难以想象的。

还有重要的是多上一些专门的网站,比如VC知识库()和VC之路(有一本很好的教程,不过现在网站的东西都没了,正在恢复),另外也是一个不错的地方。

  很多初学者往往会将Windows编程和VC++混为一谈。

打开VC++的新建项目,可以看到VC++支持很多种工程。

包括命令行的,MFC的,还有就是Win32Application,即SDK程序。

使用VC++未必是编写SDK程序,编写SDK程序也未必要用VC++。

编写Windows程序的方法也不止SDK一种,还包括使用类库如MFC,OWL,使用快速开发工具如VB,Delphi。

这些方法各有各的用处。

使用SDK无疑是最麻烦的了,我们学习SDK也并非是为了用它来编软件,虽然它可以,主要是为了对Windows编程有比较清晰的认识,这样你使用MFC时就可以做到“胸中自有沟壑”。

第一章Windows程序的框架

要点:

程序的主函数,消息处理函数

Windows程序具有相对稳定的结构,也就是说Windows程序是有一定的框架的,程序员要做的事情就是用特定的内容来填充这个框架。

Windows程序的主函数:

这个函数就像我们学习C语言时程序的主函数main()的功能是一样的,他代表了程序的入口。

但是这个函数看上去比main()似乎繁的多,如果是第一次看见这个函数肯定会感觉一头雾水,但是不要紧我们来看看这个函数各个参数的意义,(其实开始的时候完全可以不理会他们的意义)hInstance是本实例的句柄,句柄可以理解为操作系统管理使用我们的应用程序的别名,它跟指针类似但又不同于指针,它的意义只有操作系统知道,也就是说操作系统通过hInstance就可以找到我们现在的这个程序。

hPrevInstance是前一个实例的句柄。

szCmdLine:

是命令行参数,iCmdShow是窗口的显示方式。

现在我们没有必要清除每个参数的具体意义,在接下来的学习中我们用的最多的就是hInstance这个参数,但也不多,而且我们使用vc++时,无论有哪种程序生成方式这个函数一般都会自动生成。

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow)

主函数是windows程序框架的主要部分,由于windows程序是基于消息处理的,所以消息处理函数也算作是程序框架的一部分。

说到消息,我觉得从基本的c编程转到windows编程最难的一点可能就是理解windows消息机制,虽然说是机制但不必觉得高深莫测,其实很简单,举个例子来说吧:

在一个应用程序中有一个按钮,当按钮被按下时,我们已经习惯的程序会产生一个动作,在这样一个简单的过程中大部分事情是操作系统替我们完成了,检测按钮的动作,并将这个动作表现出来:

按钮的按下、起来;

按钮被按下时它会向他所在的程序发送一个消息“我被按下了”,程序中有一个消息处理函数,捕捉到这个消息,接着转而处理它:

也就是调用相关的函数。

那么我们就接着看一下消息处理函数,消息处理函数其实是一个消息循环,是一个回调函数,什么是回调函数暂不管它,只管理解为,函数由你定义而不归你调用,是由操作系统来调用的。

下面来看一下,消息处理函数的原型及其结构:

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)

{

switch(message)

{

case...

case...//这些分支语句用来分别处理不同的消息

}

returnDefWindowProc(hwnd,message,wParam,lParam);

/*这个函数是系统默认的消息处理函数,也就是说,我们的窗口程序的消息处理函数处理的只是我们感兴趣的消息,即上面的case语句,对于其他的消息我们还是使用系统默认的消息处理函数。

我们的消息处理函数是要在我们的窗口主程序中登记的,登记为我们自定义的消息处理函数之后,系统的消息就有它来处理了。

所以,在本函数的最后要使用该默认函数,否则其他的消息,本程序就无法处理了。

*/

}

了解了消息处理函数,我们继续来看程序的主函数,它是程序的容器,程序的主窗体要在其中建立,程序的消息处理函数也要在其中设置。

在主体函数中我们要做的就是两件事,一件是注册窗口类,另外一件是建立窗口。

所谓注册窗口类就是通过填写一个WNDCLASS结构,我们的窗口就算基本成型,然后要向系统注册(注册过程系统也提供了相应的函数,当然技术差不多了以后也可以自己写注册过程)。

窗口注册完毕,接下来的任务就是真正的来建立这个窗口,建立的时候前面注册的窗口类的名称作为参数传入,当然该窗口有自定义的消息处理函数的话,这时也要将这个函数传入。

这样,我们就了解了Windows程序的框架,现在我再给出一个比较经典的WindowsSDK程序的例子来看看我们的框架。

Windowssdk基本结构

客户写一个消息处理函数,在窗口建立前,将消息处理函数与窗口关联。

这样,每当有消息产生时,就会去调用这个消息处理函数。

  通常情况下,客户都不会处理全部的消息,而是只处理自己感兴趣的消息,其他的,则送回到系统的缺省消息处理函数中去。

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)

switch(message)

case...

...

returnDefWindowProc(hwnd,message,wParam,lParam);

  三、窗口的建立

  客户需要自己建立窗口,建立后会得到系统返回的窗口句柄(HWND),后继的针对窗口的操作都针对句柄进行。

  1.注册窗口类

  建立窗口前,需要制定好这个窗口的相关属性,最主要的就是将自己定义的消息处理函数与窗口关联,其他的属性还包括:

菜单、图标等等。

  这个属性指定步骤是通过指定"

窗口类"

来完成的。

  对于自己建立的窗口,这个"

需要自己制定,也即自己填充一个WNDCLASS结构,然后向系统注册。

  对于一些特殊窗口,如按钮等控件,他们的行为是系统制定好了的,所以不需要自己注册,直接使用对应的“窗口类”名称就行了。

  2.建立窗口

  建立窗口时,注册的"

名称作为参数传入。

  这样,当有针对该窗口的消息时,将调用“窗口类”中指定的消息处理函数,在其中得到处理。

  四、消息循环

  系统会将针对这个程序的消息依次放到程序的“消息队列”中,由程序自己依次取出消息,在分发到对应的窗口中去。

因此,建立窗口后,将进入一个循环。

  在循环中,取出消息、派发消息,循环往复,直到取得的消息是退出消息。

  循环退出后,程序即结束。

#include"

stdafx.h"

#include<

//一、消息处理函数

//参数:

窗口句柄,消息,消息参数,消息参数

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)

 //处理感兴趣的消息

 switch(message)

 {

  caseWM_DESTROY:

   //当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环

   PostQuitMessage(0);

   return0;

 }

 //其他消息交给由系统提供的缺省处理函数

 return:

:

DefWindowProc(hwnd,message,wParam,lParam);

//二、应用程序主函数

实例句柄、前一个实例的句柄、命令行参数、窗口显示方式

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,

PSTRszCmdLine,intiCmdShow)

 //1.注册窗口类

 staticTCHARszAppName[]=TEXT("

HelloWin"

);

//窗口类名称

 //定制"

结构

 WNDCLASSwndclass;

 wndclass.style=CS_HREDRAW|CS_VREDRAW;

 wndclass.lpfnWndProc=WndProc;

//关联消息处理函数

 wndclass.cbClsExtra=0;

 wndclass.cbWndExtra=0;

 wndclass.hInstance=hInstance;

//实例句柄

 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);

//图标

 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);

//光标

 wndclass.hbrBackground=(HBRUSH)GetStockO

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2