2009.11.3----WINDOWS程序设计

来源:互联网 发布:大数据平台服务器配置 编辑:程序博客网 时间:2024/05/13 20:07

 

Windows程序设计

虽然做了一段时间的MFC了,但是对windows程序设计感觉还是那么的陌生,可能上微软把那个框架包的太好了,总看不到深层的东西,今天看了一点侯捷的MFC深入浅出,总算对windows这个东西还有了点感觉。以下摘自侯捷的MFC深入浅出

1. Windows程序开发流程

Windows 程序分为「程序代码」和「UIUser Interface)资源」两大部份,两部份最后以RC编译器整合为一个完整的EXE 文件(图1-1)。所谓UI 资源是指功能菜单、对话框

外貌、程序图标、光标形状等等东西。这些UI 资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如.ico.bmp.cur 等等。程序员必须在一个所谓的资源描述档(.rc)中描述它们。RC 编译器(RC.EXE)读取RC 档的描述后将所有UI资源档集中制作出一个.RES 档,再与程序代码结合在一起,这才是一个完整的Windows可执行档。

2. 需要什么样的链接库

众所周知Windows 支持动态联结。换句话说,应用程序所调用的Windows API 函数是在「执行时期」才联结上的。那么,「联结时期」所需的函数库做什么用?有哪些?并不是延伸档名为.dll 者才是动态联结函数库(DLLDynamic Link Library),事实上.exe.dll.fon.mod.drv.ocx 都是所谓的动态联结函数库。

Windows 程序调用的函数可分为C Runtimes 以及Windows API 两大部份。早期的C

Runtimes 并不支持动态联结,但Visual C++ 4.0 之后已支持,并且在32 位操作系统

中已不再有small/medium/large 等内存模式之分。以下是它们的命名规则与使用时机:

   LIBC.LIB - 这是C Runtime 函数库的静态联结版本。

   MSVCRT.LIB - 这是C Runtime 函数库动态联结版本(MSVCRT40.DLL)的import 函数库。如果联结此一函数库,你的程序执行时必须有MSVCRT40.DLL在场。

另一组函数,Windows API,由操作系统本身(主要是Windows 三大模块GDI32.DLL USER32.DLL KERNEL32.DLL)提供(注)。虽说动态联结是在执行时期才发生「联结」事实,但在联结时期,联结器仍需先为调用者(应用程序本身)准备一些适当的信息,才能够在执行时期顺利「跳」到DLL 执行。如果该API 所属之函数库尚未加载,系统也才因此知道要先行加载该函数库。这些适当的信息放在所谓的「import 函数库」中。32 Windows 的三大模块所对应的import 函数库分别为GDI32.LIB USER32.LIBKERNEL32.LIB

3.需要什么样的头文件

所有Windows 程序都必须包含WINDOWS.H。早期这是一个巨大的头文件,大约有5000行左右,Visual C++ 4.0 已把它切割为各个较小的文件,但还以WINDOWS.H 总括之。

除非你十分清楚什么API 动作需要什么头文件,否则为求便利,单单一个WINDOWS.H也就是了。不过,WINDOWS.H 只照顾三大模块所提供的API 函数,如果你用到其它system DLLs,例如COMMDLG.DLL MAPI.DLL TAPI.DLL 等等,就得包含对应的头文件,例如COMMDLG.H MAPI.H TAPI.H 等等。

//对于MFC设计,除了这些链接库之外,他还额外的需要其他的头文件。

MFC 程序不这么单纯,下面是它常常需要面对的另外一些.H 档:

STDAFX.H :这个文件用来做为Precompiled header file(请看稍后的方块说明),其内只是包含其它的MFC 头文件。应用程序通常会准备自己的STDAFX.H,例如本章的Hello 程序就在STDAFX.H 中包含AFXWIN.H

AFXWIN.H :每一个Windows MFC 程序都必须包含它,因为它以及它所包含的文件声明了所有的MFC 类别。此档内含AFX.H,后者又包含AFXVER_.H,后者又包含AFXV_W32.H,后者又包含WINDOWS.H(啊呼,终于现身)。

AFXEXT.H : 凡使用工具栏、状态列之程序必须包含这个文件。

AFXDLGS.H : 凡使用通用型对话框(Common Dialog)之MFC 程序需包含此

档,其内部包含COMMDLG.H

AFXCMN.H : 凡使用Windows 95 新增之通用型控制组件(Common Control

MFC 程序需包含此文件。

AFXCOLL.H : 凡使用Collections Classes(用以处理数据结构如数组、串行)之程序必须包含此文件。

AFXDLLX.H : MFC extension DLLs 均需包含此档。

AFXRES.H - MFC 程序的RC 文件必须包含此档。MFC 对于标准资源(例如FileEdit 等菜单项目)的ID 都有默认值。