文章作者:liangzhen
信息来源:
http://www.cstc.net.cn/docs/docs.php?id=350
学习Windows API 开发快半年了,在这期间我和我在西华大学的Diyinside团队6位同学一起学完了《Programming Windows , Fifth Edition》的第一部分一共12章的关于Win32 API的基础部分。
从今天开始我会用大概6周左右的时间把我们学习的笔记和心得公布在Diyinside Community CSTC站点上。希望对于学习Win32 API的同学有所有帮助。
对于笔记中函数及其相关的资料来自于微软公司的MSDN知识库。
建议大家阅读本文前拥有《Programming Windows , Fifth Edition》的书籍。
Windows API 学习笔记(1)
--第一章 开始
在正式学习之前,请大家准备好下面这些预备工作。
(1)学习过C语言的程序设计
(2)在你本地计算机安装一个可于32位Windows开发的编译器和开发环境。
(这里推荐使用Microsoft VS.NET 2003 IDE作为学习Win32 API的开发环境,笔记中所有代码都由VS.NET 2003 IDE下完成。)
大家学习Windows API第一个问题肯定是什么是Windows API呢?
首先请大家阅读下面这段来自MSDN Library中关于Windows API的一段描述
The Win32 application programming interface (API) provides building blocks used by applications written for the Microsoft Windows operating system family.
(Win32 应用程序API是于微软公司Windows操作系统家族提供建立模块化编写应用程序。
关于微软Windows的发展历史,我这里由于是学习Win32 API,所以在学习Windows历史时候只是重点在技术发展上的历史。
(1)第一个正式的Windows产品是在1985年11月发布,Microsoft Windows 1.0
(2)第二个正式的Windows产品是在1987年11月发布,Microsoft Windows 2.0
(提供了重叠窗体、键盘和鼠标界面和对话框等耀眼的新功能)
(3)第三个正式的Windows产品是在1990年5月发布 ,Microsoft Windows 3.0
(跨越了前两个版本1MB内存使用限制,可以使用16MB 的内存资源)
(4)带来多媒体时代到来的Windows产品是1992年发布的Microsoft Windows 3.1
(在这个版本中增加了TrueType字体、多媒体技术、OLE等耀眼的多媒体技术)
(5)NT操作系统诞生是在1993年7月发布的第一个产品,Windows发展开始分道进行
(注意NT不是Network Technology 而是New Technology)
(6)客户端Windows进入巅峰产品,是分别于1995年发布的Windows 95和1998年发布的Windows 98
(Windows 98在Windows 95上主要是提供了更多硬件支持和网络的支持)
(7)商务工作站和服务器端雏形产品是微软公司Windows NT 4.0系列
(8)商用Windows进入市场主力的产品,是于2000年发布的基于NT5.0的Windows 2000 系列。
(9)今天市面上客户端主流操作系统是基于NT技术的Windows XP 系列
(10)今天服务器领域提出多块好省得服务器操作系统是Windows Server 2003 系列
关于Windows运行核心动态连接的机制
Windows 本身提供了大量的函数调用,这些函数大多数都是通过动态连接库形式编写的。通常位于Windows 的System 文件夹下面(Windows NT系统还包括了System32文件夹)。
早期Windows只提供3个动态连接库,分别代表三个子系统:
Kernel 内核 :早期16位为 KRNL386.EXE 如今32就位为KERNEL32.DLL文件
USER 用户 :早期16位为 USER.EXE 如今32就位为USER32.DLL文件
GDI 图形用户接口:早期16位为 GDI.EXE 如今32就位为GDI32.DLL文件
在早期Windows中只有几百个函数,而到来Windows 98后拥有上千个相关Windows函数。
关于Windows开发的语言选择
首先需要明确一点Windows API不是开发Windows的唯一方法。
下面是我对于开发Windows应用程序的语言选择简单分类
(1)对于开发效率要求非常高、功能非常强大的程序
建议考虑使用 C 语言和Windows APIs 开发Win32 API应用程序
(2)对于一些要求效率高的、专业商业应用程序
建议考试使用通过C++封装过的Windows APIs 开发MFC Windows应用程序
(3)对于效率考虑不高,开发周期短的应用程序
建议考虑使用微软最新.NET开发环境下的Windows From 应用程序
关于Windows应用程序的代码结构
常见的Hello World 应用程序 Win32 版
include
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0);
return 0 ;
}
(1)解释 #include 是一个包括多个Windows应用程序可能涉及的头文件
(2)解释 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
Int 是返回类型、WinMain是Win32 Windows应用程序入口点
HINSTANCE hInstance 和HINSTANCE hPrevInstance是 instance的句柄
PSTR 指向一个CHAR字符的指针
int iCmdShow是程式最初显示的方式
关于第一个Windows应用程序函数MessageBox
首先我们要知道MessageBox可以做什么?下面是一段来自MSDN Library的原文
The MessageBox function creates, displays, and operates a message box. The message box contains an application-defined message and title, plus any combination of predefined icons and push buttons.
(MessageBox函数可以建立、现实和操作消息框。这个消息框包括一个定义消息和标题、以及包括图标、按钮等附加选项)
构造参数如下所示
int MessageBox(
HWND hWnd, //指向消息对话框建立窗体句柄
LPCTSTR lpText, //指定显示消息内容
LPCTSTR lpCaption, //指定显示对话框标题
UINT uType //附加参数
);
所有附加参数都是由MB_大头的。包括三类:
(1)显示按钮:MB_OK、MB_OKCANCEL、MB_ABORTRETRYIGNORE、MB_YESNOCANCEL、MB_YESNO、MB_RETRYCANCEL
(2)指定按钮默认
MB_DEFBUTTON1、MB_DEFBUTTON2、MB_DEFBUTTON3、MB_DEFBUTTON4
(3)指定外观图标
MB_ICONHAND、MB_ICONQUESTION、MB_ICONEXCLAMATION、MB_ICONASTERISK
关于Win32 API的编译、连接和执行过程
正常情况下,在编译阶段,编译器从C原始码档案产生一个.OBJ(目标)文件。在连接阶段,连结程式结合.OBJ文件和.LIB库文件以及建立.EXE的可执行文件。
本笔记编写参考资料有:
《Programming Windows ,Fifth Edition》Charles Petzold
《Windows API》Microsoft Library Platform SDK