Windows运作机制的核心是一个称作「动态链接」的概念。Windows提供了应用程序丰富的可呼叫函数,大多数用于实作其使用者接口和在视讯显示器上显示文字和图形。这些函数采用动态链接库(Dynamic Linking Library,DLL)的方式撰写。这些动态链接库是些具有.DLL或者有时是.EXE扩展名的文件,在Windows 98中通常位于/WINDOWS/SYSTEM子目录中,在Windows NT中通常位于/WINNT/SYSTEM和/WINNT/SYSTEM32子目录中。
在Windows程序中,使用Windows函数的方式通常与使用如strlen等C语言链接库函数的方式相同。主要的区别在于C语言链接库函数的机械码连结到您的程序代码中,而Windows函数的程序代码在您程序执行文件外的DLL中。
当您执行Windows程序时,它通过一个称作「动态链接」的过程与Windows相接。一个Windows的.EXE文件中有使用到的不同动态链接库的参考数据,所使用的函数即在那些动态链接库中。当Windows程序被加载到内存中时,程序中的呼叫被指向DLL函数的入口。如果该DLL不在内存中,就把它加载到内存中。
当您连结Windows程序以产生一个可执行文件时,您必须连结程序开发环境提供的特定「引用链接库(import library)」。这些引用链接库包含了动态链接库名称和所有Windows函数呼叫的引用信息。连结程序使用该信息在.EXE文件中建立一个表格,在加载程序时,Windows使用它将呼叫转换为Windows函数。
第一个Winodws程序:
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0);
return 0 ;
}
#include <windows.h>
WINDOWS.H
是主要的含入文件,它包含了其它Windows表头文件,这些表头文件的某些也包含了其它表头文件。这些表头文件中最重要的和最基本的是:
- WINDEF.H 基本型态定义。
- WINNT.H 支持Unicode的型态定义。
WINBASE.H Kernel函数。
WINUSER.H 使用者接口函数。
WINGDI.H 图形设备接口函数。
这些表头文件定义了Windows的所有数据型态、函数呼叫、数据结构和常数标识符,它们是 程序进入点
WINUSER.H 使用者接口函数。
WINGDI.H 图形设备接口函数。
这些表头文件定义了Windows的所有数据型态、函数呼叫、数据结构和常数标识符,它们是 程序进入点
正如在C程序中的进入点是函数main一样,Windows程序的进入点是WinMain,总是像这样出现:
int WINAPI WinMain ( HINSTANCE hInstance,HINSTANCE hPrevInstance,
PSTR szCmdLine,int iCmdShow)
- Windows文件中的一个重要部分。
它在WINBASE.H中声明如下:
int
WINAPI
WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
);
附:Windows数据类型:
数据类型
说明
BOOL 布尔变量,实际上是 UINT
COLORREF 用作颜色索引的 32 位整数
DWORD 32 位的无符号整数
HANDLE 32 位的无符号整数,用作句柄
HINSTANCE 32 位的无符号整数,用作实例句柄
HWND 32 位的无符号整数,用作窗口句柄
HDC 一个设备描述背景的句柄
LONG 32 位带符号整数
LPARAM 32 位整数,用作窗口函数或者其他回调函数的参数之一
LPCSTR 指向一个字符串常量的 32 位指针
LPSTR 定义一个线性的 32 位字符串指针
LRESULT 32 位整数,是窗口函数或者其他回调函数的返回值类型
UINT 定义一个新的 Win32 数据类型,它会把一个参数强制转换成 Windows3.x 应用中的 16 位值 或 Win32 应用中的 32 位值
WCHAR 声明一个 16 位的 UNICODE 字符,用来表示世界上所有已知的书写语言的符号
WORD 16 位的无符号整数
WPARAM 32 位整数,用作窗口函数或者其他回调函数的参数之一 ( 在 Windows3.x 中为 16 位值 )
BOOL 布尔变量,实际上是 UINT
COLORREF 用作颜色索引的 32 位整数
DWORD 32 位的无符号整数
HANDLE 32 位的无符号整数,用作句柄
HINSTANCE 32 位的无符号整数,用作实例句柄
HWND 32 位的无符号整数,用作窗口句柄
HDC 一个设备描述背景的句柄
LONG 32 位带符号整数
LPARAM 32 位整数,用作窗口函数或者其他回调函数的参数之一
LPCSTR 指向一个字符串常量的 32 位指针
LPSTR 定义一个线性的 32 位字符串指针
LRESULT 32 位整数,是窗口函数或者其他回调函数的返回值类型
UINT 定义一个新的 Win32 数据类型,它会把一个参数强制转换成 Windows3.x 应用中的 16 位值 或 Win32 应用中的 32 位值
WCHAR 声明一个 16 位的 UNICODE 字符,用来表示世界上所有已知的书写语言的符号
WORD 16 位的无符号整数
WPARAM 32 位整数,用作窗口函数或者其他回调函数的参数之一 ( 在 Windows3.x 中为 16 位值 )
同时,为了统一变量的命名,在
Windows
中,不同类型的变量拥有各自的标准前缀,一般情况如表所示。
不同数据类型的前缀
前缀 数据类型
c 字符 (char)
s 短整数 (short)
cb 用于定义对象 ( 一般为一个结构 ) 尺寸的整数
n 整数 (integer)
sz 以 '/0' 结尾的字符串
b 字节
f BOOL
w 字 (WORD ,无符号短整数 )
l 长整数 (LONG)
h HANDLE( 无符号整数 )
m_ 类成员变量
fn 函数 (function)
dw 双字 (DWORD, 无符号长整数 )
前缀 数据类型
c 字符 (char)
s 短整数 (short)
cb 用于定义对象 ( 一般为一个结构 ) 尺寸的整数
n 整数 (integer)
sz 以 '/0' 结尾的字符串
b 字节
f BOOL
w 字 (WORD ,无符号短整数 )
l 长整数 (LONG)
h HANDLE( 无符号整数 )
m_ 类成员变量
fn 函数 (function)
dw 双字 (DWORD, 无符号长整数 )