1.11
win2.0增强了键盘和鼠标接口,特别是加入了菜单和对话框。
GUI是个人计算机工业史上集各方面技术大成于一体的重要产物。 Windows上执行的程序可共享「动态链接库」的文件中的例程。 Windows包括一个机制,能够在执行时连结使用动态链接库中例程的程序。 Windows自身基本上就是一个动态链接库的集合。
1.12
windows运作机制的核心是一个“动态链接”的概念,windows提供了丰富的应用程序可调用函数。早期的windows主要部分仅通过三个动态链接实作。代表windows的三个主要子系统。被称作Kernel、User和GDI。
使用Windows函数通常和使用strlen等C语言链接库方式相同。主要区别是C语言链接库函数机械地链接到程序代码中,而windows函数的程序代码在程序可执行文件外的DLL中。
当执行Windows程序时,它通过一个称作「动态链接」的过程与Windows相接。一个Windows的.EXE文件中使用了不同动态链接库的参考数据,所使用的函数就在那些动态链接库中。当Windows程序被加载到内存中时,程序的调用指向DLL函数的入口。如果该DLL不在内存中,就把它加载进去
1.2
对程序写作者来说,操作系统由本身的API定义的。API包含了所有应用程序能够使用的操作系统函数调用,同时包含了相关类型数据类型和结构。
应用程序自身的特性决定了所使用的工具,但不论使用什么样的工具来工作,学习WINAPI将能让我们更深入地了解windows的工作方式。
1.3
一个简单的Win32程序。
#include<windows.h>
int WINAPIWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0);
return 0 ;
}
WONDOWS.H是主要的包含文件,同时它也包含了其他头文件。这些头文件中最重要和最基本的是:
WINDEF.H 基本类型定义
WINNT.H 支持Unicode类型定义
WINBASE.H Kernel函数
WINUSER.H 使用者接口函数
WINGDI.H 图形设备接口函数
这些头文件定义了Windows的所有数据类型、函数调用、和常数标志符。
现在考虑WinMain函数;
int WINAPI WinMain ( HINSTANCE hInstance,HINSTANCE hPrevInstance, PSTR szCmdLine,int iCmdShow)
我们注意这个函数第三个参数类型由代码中的LPSTR变成了PSTR,这两个类型都是定义在WINNT.H中,都是指向字符串的指针。LP前缀代表“长指针”,是16位Window下的产物。
同时在WinMain声明中改变了两个参数的名称。许多Windows程序中的变量名都使用「匈牙利表示法」命名系统,该系统在变量名称前面增加了表示变量数据型态的短前缀,。现在如前缀i表示int、 sz表示「以零结束的字符串」。
同时,WinMain函数声明一个int返回值。WINAPI标志符在WINDEF.H中定:
define WINAPI_stdcall
该语句指定了一个调用约定,包括如何生产机械码以在堆栈中放置函数的调用参数。许多Windows函数调用声明为WINAPI。
第一个参数:「执行实体句柄」。在Windows程序设计中,句柄仅是一个应用程序用来识别某些东西的数字。在这种情况下,该句柄唯一地标识该程序,并在其他windows函数调用中作为参数。在Windows的早期版本中,当同时运行同一程序多次时,便创建了该程序的多个实例。同一应用程序的所有执行实体共享程序和只读的内存(如菜单和对话框模板资源)。程序通过检查hPrevInstance参数就能够确定自身的其它执行实体是否正在运行。然后它可以略过一些繁杂的工作并从前面的执行实体将某些数据移到自己
的数据区域。
第二个参数:在32位Windows版本中,该概念已被抛弃。故都为NULL。
第三个参数:用于执行程序的命令列。某些Windows应用程序利用它在程序启动时将文件加载内存。
第四个参数:程序最初显示的方式,可以是正常或者是最大化地充满整个画面,或者是最小化显示在工作列中。