windows32程序基础
一 Windows编程基础
1 Win32应用程序的基本类型
1.1 控制台程序
不需要完善的Windows窗口,可以使用DOS窗口
的方式显示。
1.2 Win32窗口程序
包含窗口的程序。可以通过窗口与程序进行交互。
1.3 Win32库程序
提供已有的代码,供其他程序使用。
动态库:DLL 是在执行的时候可以加载的程序。
静态库:LIB 是在编译链接是使用的程序。
1.4 对比
1.4.1 程序的入口函数不同
控制台:main
Win32窗口程序:WinMain
动态库DLL:DllMain
静态库LIB:无
1.4.2 编译链接后存在的形式不同
控制台和Win32窗口程序:EXE文件,可以执行
动态库DLL:DLL文件,无法执行
静态库LIB:LIB文件,无法执行
1.4.3 执行结果不同
控制台:使用DOS窗口,自己没有窗口。
Win32窗口程序:会产生自己的窗口,
可以将结果输出或者从窗口接受输入。
动态库DLL:自己无法执行,提供可以执行
的代码,当EXE等程序执行时,可以使用
这些代码.执行时,该库必须在指定的路径.
静态库LIB: 自己无法执行,提供给程序在
编译链接时使用,将库中的代码嵌入到
程序当中.执行时,不需要该库存在.
二 Win32窗口程序和编译环境
2.1 开发和编译环境
VC1.5 - VC6.0(2008) - VC10.0(2010)
2.1.1 编译器 CL.EXE
将原代码编译目标代码. OBJ文件.
2.1.2 链接器 Link.EXE
将OBJ文件和库函数链接.生成EXE.
2.1.3 资源编译器 rc.exe
将资源脚本编译成可以链接的文件(RES).
2.2 头文件和库
2.2.1 头文件 windows.h包含了windows
常用的定义等.其他,还包含了一些其他的
头文件:
windef.h - 定义了各种的数据类型
winbase.h- 定义了kernel的相关函数:kernel32.lib - 提供进程/线程/内存等等
wingdi.h - 定义了绘图和文字:gdi32.lib - 提供绘图/文字等。
winuser.h- 窗口 控件等函数:user32.lib - 包括窗户/界面等等.
winnt.h - 提供Unicode支持
2.3入口函数
int WinMain(
HINSTANCE hInstance, //hInstance - 应用程序的实例句柄
HINSTANCE hPrevInstance,//hPrevInstance - 该应用程序的前一个实例句柄,一般为0
LPSTR pszCmdLine,//pszCmdLine - 命令行参数
int nShowCmd )//nShowCmd - 窗口的显示方式
2.4 编译环境的准备
在VC98的BIN目录下VCVARS32.BAT :在不用Visual C++的情况下,可以把此文件(VS98下的bin目录下)直接拖进cmd控制台,进行环境路径配置
2.5 编译CL.EXE(VS98下的bin目录下)
CL的常用选项
/c 只编译不链接
/TC 编译C文件 :如果不指定,CL会根据文件类型自动区分
/TP 编译C++文件 :如果不指定,CL会根据文件类型自动区分
/I 头文件所在路径
字符大小写敏感
2.6 链接LINK.EXE(VS98下的bin目录下)
LINK常用选项:
/out:文件名,链接成指定文件名的程序
/LIBPATH:LIB文件存放的路径, /LIBPATH:"E:\XXX"
/SUBSYSTEM: CONSOLE/WINDOW
字符大小写不敏感
2.7 执行
正常执行或带参数执行
三 资源的处理
3.1 资源和资源脚本
资源:ICON/CUSRUR/BITMAP/MENU......
资源脚本: 扩展名为rc文件。
3.2 编译资源
使用rc.exe编译资源,生成RES文件(rc.exe不在VS98下的bin目录下)
3.3 链接资源
使用link.exe将RES文件链接到程序当中
3.4 ICON的使用
LoadIcon从指定程序中加载ICON资源。