第一部分 基础知识
第一章 起步
导言:
(1)API(Application Programming Interface)应用程序接口。
(2)对C的结构(Structure)和指针(Pointer)重点理解。
(3)标准运行时库(Run-Time Library, RTL),有所了解就更好了。
1.1. Windows环境
1.1.1 Windows简史(略)
1.1.2 Windows的方方面面
介绍几个名词概念
GUI:(Graphical User Interface),图像用户界面。所有GUI都用位图(Bitmap)视频显示器显示图形。
DLL:(Dynamic-Link Libraries),动态链接库。Windows本身基本上就是一套动态链接程库。
GDI:(Graphics Devices Interface),图形设备接口。
1.1.3 动态链接
a)Windows工作原理的中心思想就是“动态连接”概念。Windows自身带有一大套函数,这些函数都是在动态链接库里实现的。 这些文件爱你的名称都带有.DLL,或有时带有后缀.EXE。
b)早期Windows的大部分只是实现了3个动态链接库,分别代表了Windows的3个主要的子系统, 即内核(kernel)、用户(user)以及GDI。
c)系统有上千个函数以供应用程序调用。应用程序可能调用的所有函数必须先要在头文件里声明。
d)在Windows程序中,调用Windows函数与调用C语言的库函数(如Strlen),没什么两样。 最要区别就是C语言库函数的机器代码会直接连接到你的程序代码中,
而Windows函数则是放在你的程序之外的DLL里。
e)当Windows程序运行时,它通过一个叫做“动态链接”(dynamic linking)的进程与Windows接口。每个Windows的EXE文件包含它所要用的各个动态链接库以及库中的函数的引用地(reference)。
当一个Windows程序被装入内存之后,程序中的函数调用都被解析成DLL函数入口的指针,同时这些被调用函数也被装入内存(如果还没有在内存中的话)。
f)当链接Windows程序以生成执行文件时,一定得链接你的编程环境所提供的特殊的“导入库”(import library)。
这些导入库包含所有Windows函数调用要碰到的动态链接库的名称及引用信息。
链接程序利用这些信息构建EXE文件中的表格,当装入程序的时候,Windows要靠这些表格来解析,Windows函数调用。
1.2 Windows编程选项
1.2.1 API及内存管理模式
a)对于程序员来说,OS的功能完全由API来定义。API涵盖了APP所能调用的全部OS函数,以及相关的数据类型和结构。
b)把32位的Windows(95,98及所有NT版)的API成为Win32 API。
1.2.2 语言选择
a)无论你用什么来编写Windows程序,搞熟API都能让你对Windows的内部有更深刻的理解。
b)近几年,很多专业程序员当中,带有微软基本类库(Micrsoft Foundation Class Library,MFCL)的Visual C++相当流行。
MFC把很多Windows编程中的繁杂的东西都打包到了C++的类集当中。
1.2.3 编程环境
a)Visual C++6.0 (经典!)(我目前用的VS2008)
b)MSDN代表微软开发员网络(Microsoft Developer Netword, MSDN)。
1.2.4 API文档
a) 安装VS2008时,同时把MSDN装上,就OK啦。
1.3 你的第一个Windows程序
1.3.1 字符模式
a)创建一个控制台应用程序,代码如下:
1 #include "stdafx.h" 2 //#include "stdio.h" 3 int _tmain(int argc, _TCHAR* argv[]) 4 { 5 printf("Hello, Word "); 6 return 0; 7 }
运行下,查看结果为: Hello, Word
这个程序是可以直接调用C运行库函数,如:printf而不需要事先声明的。
以上这个程序包括了include语句,程序入口,运行库函数调用,以及return语句。
1.3.2 Windows对应程序
1.3.3 头文件 在cpp里打头的几乎都是预处理器(preprocessor)指令:
#include <winddows.h>
WINDOWS.H是一个最重要的包含文件,它包括了若干其他Windows头文件,其中的某些头文件又包含 另外的一些头文件。
下列几个是最重要也是最基本的头文件:
WINDEF.H :基本数据类型定义。
WINNT.H :支持Unicode的类型定义。
WINBASE.H :内核函数。
WINUSER.H :用户界面函数。
WINGDI.H :图形设备接口函数。
1.3.4 程序入口
具体的WinMain例子由来,没做具体分析。
a)前缀LP代表长指针(Long Pointer),它是16为Windows的产物。
b)在Windows程序中,句柄无非就是一个数值,程序里用它来标识某些东西。
1.3.5 MessageBox函数 此函数用来显示短消息的。所显示的小小窗口实际上也是一个对话框。
1 int MessageBox( 2 HWND hWnd, //通常是窗口的句柄(第三章详解) 3 LPCTSTR lpText, //将要在信息框里出现的文本字符串。 4 LPCTSTR lpCaption, //将要在标题栏上显示的文本字符串。 5 UINT uType //以MB_打头的一些常量的组合。 6 );
在范例程序中,MessageBox函数返回的数值为1,更精确的说返回IDOK。
在WINUSER.H中,IDOK定义为1。
1.3.6 编译、连接、及运行
a)通常情况下在编译阶段,编译器从C源代码文件产生一个.OBJ(目标)文件。
连接阶段,连接器又把.OBJ文件和.LIB(库程序)文件放到一起产生.EXE(可执行)文件。
b)在VS里,可以在不同的配置下编译和连接程序。默认情况下,这些配置通常称为Debug配置和Release配置。
在Debug配置下,.EXE文件中加入了一些有助于程序调试以及源代码跟踪的信息。
第一章,OVER !