知识点:
1.Windows应用程序的类型
2.三种应用程序的对比
1.Windows应用程序的类型
2.三种应用程序的对比
3.Windows开发工具和库
4.Windows库和头文件
5.HelloWorld程序的相关函数
6.编译、链接和执行
7.编写第一个窗口程序(HelloWorld版)
8.资源的使用
9.NMAKE 和 Makefile
10.Makefile的语法
11.DBCS和UNICODE编码的区别
12.字符集的应用
1.Windows
应用程序的类型
–控制台程序 Console
–窗口程序
–库程序
DOS程序,本身没有窗口,通过Windows DOS窗口执行
拥有自己的窗口,可以与用户交互
存放代码、数据的程序,执行文件可以从中取出代码执行和获取数据
-静态库程序
扩展名LIB,在执行文件执行时从中获取代码
-动态库程序
扩展名DLL,在编译链接程序时,将函数地址放入到执行文件中
2.三种应用程序的对比
-入口函数
控制台程序 - main
窗口程序 - WinMain
动态库程序 - DllMain
静态库程序 - 无入口函数
-文件存在方式
控制台程序、窗口程序 - EXE文件
动态库程序 - DLL文件
静态库程序 - LIB文件
-执行方式
控制台程序 - 在DOS窗口内执行。
窗口程序 - 拥有自己的窗口在自己的窗口内执行.
动态库程序 - 本身无法执行,由可执行程序或其他的DLL调用
静态库程序 - 执行不存在,代码会嵌入到可执行文件或DLL等中。
–控制台程序 Console
–窗口程序
–库程序
DOS程序,本身没有窗口,通过Windows DOS窗口执行
拥有自己的窗口,可以与用户交互
存放代码、数据的程序,执行文件可以从中取出代码执行和获取数据
-静态库程序
扩展名LIB,在执行文件执行时从中获取代码
-动态库程序
扩展名DLL,在编译链接程序时,将函数地址放入到执行文件中
2.三种应用程序的对比
-入口函数
控制台程序 - main
窗口程序 - WinMain
动态库程序 - DllMain
静态库程序 - 无入口函数
-文件存在方式
控制台程序、窗口程序 - EXE文件
动态库程序 - DLL文件
静态库程序 - LIB文件
-执行方式
控制台程序 - 在DOS窗口内执行。
窗口程序 - 拥有自己的窗口在自己的窗口内执行.
动态库程序 - 本身无法执行,由可执行程序或其他的DLL调用
静态库程序 - 执行不存在,代码会嵌入到可执行文件或DLL等中。
3.Windows开发工具和库
开发工具 Visual Studio C++
VC1.5 - VC6.0 – VC2005-VC2010( 10.0 )
VC的编译工具
编译器CL.EXE 将源代码编译成目标代码
链接器LINK.EXE 将目标代码、库链接生成最终文件
资源编译器RC.EXE 将资源编译(.rc),最终通过链接器存入最终文件
4.Windows库和头文件
- Windows库
kernel32.dll - 提供了核心的API,例如进程、线程、内存管理等。
user32.dll - 提供了窗口、消息等API
gdi32.dll - 绘图相关的API
-头文件
windows.h - 所有windows头文件的集合
windef.h - windows数据类型
winbase.h - kernel32的API
wingdi.h - gdi32的API
winuser.h - user32的API
winnt.h - UNICODE字符集支持
5.HelloWorld程序的相关函数
int WINAPI WinMain(
HINSTANCE hInstance,//当前程序的实例句柄
HINSTANCE hPrevInstance, //当前程序前一个实例句柄
LPSTR lpCmdLine,//命令行参数字符串
int nCmdShow //窗口的显示方式
);
hPrevInstance - Win32下,一般为NULL
int MessageBox(
HWND hWnd,//父窗口句柄
LPCTSTR lpText, //显示在消息(提示)框中的文字
LPCTSTR lpCaption, //显示在标题栏中的文字
UINT uType //消息框中的按钮、图标显示类型
);// 返回点击的按钮ID
6.编译、链接和执行
编译环境准备
VC98\BIN\VCVARS32.BAT
编译程序 - CL
CL.EXE -? 显示CL的帮助
/c 只编译不链接
/Tc 编译C文件
/Tp 编译C++文件
链接程序 - LINK
LINK.EXE xxx.obj xxx.lib
执行
7.编写第一个窗口程序(HelloWorld版)
编写窗口程序的步骤:
1 定义WinMain函数2 定义窗口处理函数 (自定义,处理消息)3 注册窗口类(向XP系统写入一些数据)4 创建窗口(在内存中创建窗口)5 显示窗口(根据内存中数据,在显示器中将窗口图像绘制出来)6 消息循环(提取/翻译/派发消息)7 消息处理
8.资源的使用
编写资源的文件 -.rc资源脚本文件
编译rc文件 - RC.EXE
将资源链接到程序中 - LINK.EXE
9.NMAKE 和 Makefile
NMAKE
Makefile的一个解释执行的工具,根据 Makefile文件中的定义,编译和链接程 序,最终生成目标文件.
Makefile
定义编译和链接等操作的脚本文件(把项目的处理命令写入),一般对整个项目进行处理。
10.Makefile的语法
HELLO:依赖行
cl.exe hellownd.c /c//命令行
rc.exe hellownd.rc//命令行
link.exe hellownd.obj hellownd.res user32.lib //命令行
Makefile文件中可以有多个依赖行。
执行方式
NMAKE首先找到第一个依赖行
检查依赖行的依赖项,如果发现依赖项,首先执行依赖项命令行
执行完所有依赖项命令后,再执行自己的命令行。
11.DBCS和UNICODE编码的区别
DBCS字符编码:
A 我 是 程 序 员
01 0203 0405 0607 0809 0A0B
但是解析时,可能为:
01 02030405060708090A0B
0102 030405060708090A0B
UNICODE编码:
A 我 是 程 序 员
0001 0203 0405 0607 0809 0A0B
不存在解析的问题
12.字符集的应用
宽字节字符
wchar_t 每个字符占2个字节
char 每个字符占1个字节
wchar_t 实际是 unsigned short 类型,定义时,需要增加“L”,通知编译器按照双字节编译字符串,采用UNICODE编码。
需要使用支持 wchar_t 函数操作宽字节字符串。例如:
wchar_t * pwszText = L"Hello wchar";
wprintf( L"%s\n", pwszText );
TCHAR
#ifdef UNICODE // r_winnt
typedef WCHAR TCHAR, *PTCHAR;
#define __TEXT(quote) L##quote
#else
typedef char TCHAR, *PTCHAR;
#define __TEXT(quote) quote
#endif
UNICODE字符打印
printf对UNICODE字符打印支持不完善。
在Windows下使用WriteConsole API打印UNICODE字符