Windows应用程序的结构和编程步骤都不同于DOS环境中的常规做法。一般来讲,编制一个结构完整的Windows应用程序需要书写以下五种文件:a. 资源描述文件,扩展名为RC,这是一个普通的ASCII文件,定义了应用程序使用资源,包括菜单、光标、对话框等。b.图标文件,扩展名为ICO,这个文件由Windows提供的图标编辑器iconedit.exe生成,用来存放应用设计的图标。C.源文件,扩展名为c。d.头文件,扩展名为h,这个文件用来定义应用程序中使用的常量、变量和函数。e.模块定义文件,扩展名为DEF,这个文件是链接程序的输入文件,定义了Windows应用的名字、内存要求、代码段/数据段属性、输入输出函数等。
在DOS环境中编写C语言(或汇编语言)程序所积累的经验,有些可能并不适用于Windows环境。在编写Windows应用程序时,必须记住以下要领:
1.不要对CPU进行独占控制。CPU作为一种共享资源,虽然Windows是多任务操作系统,但它是不能越权抢占CPU的。在应用程序未释放所占用的CPU之前,它不能从应用程序哪里夺回控制。相互协作的程序必须小心使用好CPU,以给其它程序有充分的执行机会。
2.不要试图直接访问内存或其他硬件设备。Windows需要对这些资源进行绝对的控制,以保证所有正在运行的应用程序都能均等地、无中断地访问它们。
3.在Windows应用程序里,所有Windows能调用的函数必须用PASCAL关键字定义,这样能保证函数对参数的正确访问。
4.每个程序必须有而且只有一个WinMain函数。该函数为应用程序的入口点,相当于DOS环境中C语言程序的main函数。
5.一定要检查所使用的Windows函数的返回值。函数失败时(通过检测返回值可以确认)会造成不正常的环境,忽略返回值检查不是一种号的编程风格。
6.不要使用C运行函数可得控制台I/O(如getchar,putchar,scanf和printf等)。
7.不要使用C运行库的文件I/O函数访问串行口和并行口,最好使用Windows的通讯函数。
8.可使用C运行函数的文件I/O函数访问磁盘文件。在特殊情况下,可使用Windows的Open File函数和运行库的低级I/O函数。
9.可使用C运行函数库的内存管理函数malloc、calloc、realloc和free。但必须注意,Windows将把这些函数转换成自己的局部堆函数,即转换为LocalAlloc、LocalReAlloc及LocalFree函数。由于局部堆函数并不是在任何时候都能保证与C运行库函数的内存管理函数有完全相同的功能,故有时可能会得到不可预知的结果。
10.可以充分利用Windows的系统资源。在开发Windows应用程序时,能够定义和使用如下十种系统资源:内存资源、图标、光标、位映象、字符串资源、菜单、键盘加速器、用户自定义资源、对话框、字型。灵活适当地利用windows的这些资源,一定会开发出多姿多彩,富有特色的应用程序来。