CSDN博客

img vcbear

编写可以在所有WINDOWS平台上运行的应用软件

发表于2001/1/2 12:16:00  1490人阅读

编写可以在所有WINDOWS平台上运行的应用软件 


 
---摘自软件世界1995.11 作者不详, 对原作有部分改动, 如"串"改为"线程", 
   "对话"改为"对话框"等等.                     ---- TSAI ---- 
 
Windows 95的出现使PC的使用非常容易, 并吸引越来越多的人使用PC. 这将导致对 
WINDOWS应用软件以及基于WINDOWS应用软件的开发人员的巨大需求. WINDOWS 95为 
应用软件的更易使用以及和WINDOWQS平台的更高集成, 带来新的景象和机会. 
 
WIN32和OLE2.0 
对一个较高水平而言, 基于WINDOWS的应用软件开发人员在开发WINDOWS95的应用软件 
时需要考虑五个重要因素: 最重要的两个因素是WIN32和OLE2.0. 它们是为所有平台编写 
大的WINDOWS应用软件的基本建造模块; 第三个因素是开发者应遵循正为未来的WINDOWWS 
操作系统开发的USER INTERFACE DESIGN GUIDE, 它包含使用的通用控件和对话; 第四个 
因素是PLUG-AND-PLAY事件跟踪, 这使得顾客只需插入一个设备并打开PC--系统做剩下 
的所有工作. 开发人员编写的应用软件应是PLUG-AND-PLAY事件清楚的, 以便于应用软件 
能够很好地安置在WINDOWS 95中,对设备的插入和拔出这些变化很清楚; 最后一个因素是, 
开发者应当利用所提供的对注册信息,长文件名和通用命名约定(UNC)路径名的支持以及 
所提供的数据类型的文件观察器, 使得开发出的应用软件和WINDOWS95外壳较好地集成在 
一起. 幸运的是, 开发者考虑上述五个因素以后开发出的应用软件通过WIN32 API仍可在 
WINDOWS NT和WINDOWS 3.1操作系统上运行. 不仅如此, 开发出的应用软件还可以在 
WINDOWS NT下一版本CAIRO下运行. 
 
WIN32: 一个API, 多个平台 
使用WIN32 QPI, 用户可以开发出在WINDOWS95, WINDOWS NT, 以及WINDOWS 3.X上均能 
成功运行的应用软件, 该软件仍可利用基础平台的特征. 主要原因在于, WIN32 API 
提供一套向上兼容的WIN32功能,信息,结构, 它们在WINDOWS95, WINDOWS NT和WINDOWS 
3.X或WINDOWS NT的下一版本CAIRO上运行的结果是一致的. 
特定平台的基础能力决定了WIN32 API在其中实现的程度. 例如, 所有WINDOWS平台, 
包括WINDOWS 3.1 WITH WIN32, 为包括32位虚拟内存管理(VirtualAlloc)和存储映射 
文件的强有力功能提供一个环境, WINDOWS95和NT允许应用软件编写者利用一些附加 
功能, 如线程和长文件名, WINDOWS 3.X WITH WIN32S没有这些功能 . WINDOWSNT提供了 
WINDOWS95 和WIN32S没有的一些附加功能, 例如安全性和UNICODE API. 
由于WIN32S和WINDOWS95上还保留着不被支持的功能, 用户可用GetVersion函数探测 
基础平台的种类, 因而在一次执行中可利用不同水平的功能(依平台种类而定). 例如, 
用户可以编写一个应用软件, 它在WINDOWS95和WINDOWS NT上运行时使用长文件名和 
线程, 在WINDOWS 3.X WITH WIN32S上运行时提供8.3文件名, 并且使线程无效. 
与基于WINDOWS的16位应用软件不同,运行在WINDOWS95 和NT上的WIN32应用软件抢占式 
运行多任务, 也能在它们分离的,保护的地址空间运行多个执行线程. WIN32应用软件允 
许用户真正地同时操作多个任务. 例如, 用户可以同时进行编译,复杂的电子数据表核 
算, 文件打印及单人玩纸牌游戏. 
 
可移植的WIN32应用软件 
从发展的角度来看, 应用软件可以访问32位的带状存储空间, 避免使用段存储空间. 
WIN32 API就利用了目前的32位处理器, 也允许应用软件使用新的API创新, 例如路径, 
Bozier以及线程. WIN32 API也可以移植到非INTEL平台, 例如MIPS R4000/R4400, DEC 
ALPHA AXP以及POWERPC. 这意味着用户只需重新编译和测试应用软件, 该软件就可在多 
个硬件配置上运行. 
把现有的WINDOWS 16位应用软件4移植到WIN32中要相对容易些. 事实上, 伴随WIN32 SDK 
提供了一个被称为PORTTOOL的工具, 可以在把WIN16应用软件移植到WIN32的过程中扫描 
源代码, 并指出哪些代码需要加以修改. PORTTOOL的一个修订版本, 已经出现在MS 
DEVELOPMENT LIBRARY中, 不仅可以帮助软件移植, 也可以示范一个应用软件如何做到 
既可以利用所在基础平台的独特功能, 双可以在所有平台上运行. 
 
对象连接和嵌入 
OLE2.0版本为最终用户提供了一个用来创建复合文档的一致性方法使交叉应用程度的编 
程成为可能并提供在应用软件和桌面计算机之间的拖放功能 . 它也允许用户从外壳阅读 
丰富的文件信息, 例如图标,动作以及应用软件自身的特性. 
WINDOWS95是MS的第一个实现以文件为中心模式,用在个人计算机上的操作系统产品. 
WINDOWS 95拉口开发的目的是为由OLE2.0规定定义的最终用户功能提供基础以及使 
WINDOWS当前用户开始使用WINDOWS95时使用效率就很高. 
为了与WINDOWS95环境很好地集成在一起, 应用软件应当采用OLE2.0技术, 例如复合文 
件, 拖放功能, 可视编辑以及自动化. 应用软件使用复合文件以及在被称作为 
"SUMMARY INFORMATION"的文件中驻留一个信息流是非常重要的. WINDOWS95将使用该流 
的信息提供关于来自外壳中文件的补充信息. 另外, 如果用户为他们的应用软件注册 
OLE2.0, OLE类标识等, 并且适当设置文件类型, WINDOWS95 能够跟踪哪一个应用软件 
创建了哪一个不带扩展名的文件, 以获得有关OLE2.0重要性的更加具体的信息. 
 
用户接口设计指导: 一致性和集成性 
 
WINDOWS操作系统和基于WINDOWS的应用软件的一个大的优点即一致性. 在学习如何使用 
WINDOWS和至少一个基于WINDOW析应用软件以后, 熟悉一个新的应用软件相对来说就比较 
容易. 一致性也建造了一个内聚环境, 允许人们把注意力集中于他们的数据而不是应用 
软件和外壳. 
另一个优点是USER INTERFACE DESIGN GUIDE, 它描述了如何设计运行在WINDOWS操作系 
统上的软件. 它的目的是促进基于WINDOWS软件内部以及软件之间的可视性和功能的一 
致性. 
WINDOWS接口功能的增强为从基本的图形用户接口设计向更加面向对象的用户接口设计演 
变铺平了道路, 面向对象的用户接口以数据为中心, 而不是以应用软件为中心. 这种设 
计是OLE所提出方向的继续作为结果. 开发都和设计者可能需要重新考虑接口中应包括 
哪些基本的组成部分(对象)以及对象的操作和属性. 虽然应用软件仍是重要的, 但它们 
不再是用户考虑的焦点. 用户应当能够不用考虑如何开始一个应用软件就能与他们的数 
据相互作用, 因此用户可以把注意力集中在他们的任务上. 
应用软件可以自动使用许多新的可视工具以发出标准的WIN32 API调用. 例如, 一个新的 
带有左对齐标题文本的标题条将出现在应用软件中, 对应用软件部件未作任何修改. 对 
于其他标准的WINDOWS控件, 情况也是这样. 然而, 如果开发者开发一个使用用户控件 
的应用软件, 开发者应当了解一下设计指导, 考虑使用新的通用控件和对话框. 
WIN95引进几个新的WIN32 API, 对通用控件和对话框提供支持. 使得新的可视用户接口 
特征的实现容易些. 新的通用控件包括工具条, 状态条, 列标题(COLUMN HEADING), 标 
志(TABS), 幻灯片(SLIDER), 进度显示器(PROGRESS INDICATOR), 丰富的文本控件, 表 
显示以及树显示. 也将对现有通用对话框进行一些修改, 以增加一些补充功能, 现有通 
用对话框包括OPEN, SAVE AS以及PRINT SETUP. 已经使用通用对话框的应用软件应当继 
续这样做. 
当WIN95和NT CAIRO装备有再分配动态连接库(DLL)时, 通过DLL新的通用控件和对话框 
也适用于WIN32S和WINNT的当前版本. 这样, 应用软件可以利用新的控件和对话框, 而且 
仍然可以运行在所有的WINDOWS平台. 修订的USER INTERFACE DESIGN GUIDE, 可以在 
DEVELOPMENT LIBRARY中找到, 覆盖了新的控件和对话框以及其他风格的应用软件指导准 
则. 
 
PnP事件: 使PC用起来更容易 
 
应用软件应当支持新的PLUG-AND-PLAY信息. MS与PC系统和部件的制造商密切合作, 开 
发了新的PNP硬件设计标准, 该标准可以实现PC系统上设备的自动和动态配置. PNP将成 
为MS操作系统产品的标准特征, WIN95首次采用了PNP功能. 
虽然PNP可能看起来象硬件系统专有的创造, 但它提供了一些关键功能, 使得应用软件智 
能地响应系统的变化. 在这种方式下, 一般应用软件也将很好地与WINDOWS系统集成在一 
起. 当硬件配置发生动态变化, 例如, 插入一个传真调制解调器, 或者网络适配器,  
应用软件将收到有关信息, 并且可以在没有请求用户接口的任何干预的情况下, 自动利 
用这些新的硬件的能力. 这种设计方法使得PC对新的和现有用户都很直观. 例如, 当 
计算机网络上移去, 应用软件能够提醒用户注意网络上的打开的文件. 
此外, 应用软件可能关心在扫描过程中显示分辨率的变化( 这种变化可能发生在WIN95 
上). 也放存在不同的图标或位映射, 应用软件使用它们依赖于显示分辨率. 应用软件 
获得WM_DISPLAYCHANGED消息, 它能作出必要的更新. 
另一个重要的特征, 被称为慢连接, 允许应用软件对远程联系拥有智能化的知识. 如 
果应用软件运行在通过远程访问服务连接到网络的计算机上, 应用软件对从网络和自 
动存储文件装入数据非常灵敏. 
应用软件也应当为网络上的长操作提供一个CANCEL按刍, 在相同的方式下, 应用软件 
能够监视ADVANCED POWER MANAGEMENT(APM)信息以检测系统是否依赖电池运行. 如果 
系统依赖电池运行, 为了完成背景任务应用软件能够作出转磁盘以及自动存储频率的 
灵敏选择. 
如果用户加进这个功能, WINDOWS NT和WIN32上将发生什么? 对于其中大部分组成, 什 
么也不发生. WINDOWS NT对检测慢连接(SLOWLINK)的支持, 如同运行在WINDOWS FOR 
WORKGROUP上的WIN32所做的那样. 但是, WINDOWS NT和WIN32S的当前版本对PNP并不清 
楚, 所以它们不宣传这些消息. WINDOWS NT CAIRO将对PNP完全清楚, 支持所有PNP信号 
和事件. 
 
外壳支持 
 
WIN95通过提供单一工具与所有资源( 文件, 程序, 打印机以及其他各种设施 )一起工 
作, 简化了与系统资源的工作. WIN95把各种不同的管理者-- PROGRAM MANAGER, FILE 
MANAGER, CONTROL PANEL, PRINT MANAGER和WINDOWS SETUP联合起来--并且可以把所有 
资源组织在一个灵活的层次结构中. 为了系统资源, 拖放功能操作将受到支持, 一个桌 
面区域将用来放置经常访问的资源. 
增强功能还包括5个阅读器, 使用户可以在没有安装建立文件的应用软件的条件下阅读 
文件的内容. WIN95为必个数据类型提供一些标准的文件阅读器. 然而, 用户也可以为 
自己的数据类型提供文件阅读器, 或者提供带有更多特征( 例如拷贝和打印 )的文件 
阅读器. DEVELOPMENT LIBRARY的未来版本将提供更多有关文件阅读器的信息.  
WIN95中对长文件和UNC路径名(/SERVER/SHARE)的支持使得信息浏览和安置非常方便. 
应用软件应当使用UNC路径名, 而不是驱动器字母, 以便于在网络共离上打开的文件, 
下一次在没有请求用户与相同的驱动器字母再联系的条件下开始对话框时, 仍可能很 
容易地被访问. WINNT和WFW3.11已经支持UNC路径名. WIN95和WINNT支持长文件名, 但 
用户的应用软件在WIN32S上将看8.3文件名. 如果用户使用通用对话框, 用户将自动获得 
长文件名和UNC路径名支持, 所以, 用户所要做的全部事情是确保缓冲区足够存储255个 
字符的长文件名, 外加一个260字符的UNC路径名. 
用户也需要为他的应用软件在系统注册处注册几个关键项, 如大小图标, 语意菜单的缺 
省动词, 附加属性页. WIN95将利用这些注册项显示用户应用软件的有关信息. 
 
踏上走向WINDOWS 95的路 
 
既然用户已经知道WIN95应用软件的一些重要特征, 便可以很容易地设计开发32位的 
WIN95应用软件, 开发出的应用软件也能运行在WINNT和WFW WITH W32S上. 下面给出一些 
值得注意的地方: 
  1.检查PORTTOOL. 
  2.请使用WIN32众多开发工具的一个工具, 如WIN32 SDK, VC FOR WINNT, WATCOM C++ 
95, SYMANTEC C 6.1, BC4.0或者PHARLAP TNT. 
  3.按WINDOWS95 特征设计应用软件, 开发WIN32 OLE2.0支持的应用软件. 
  4.首先在WINNT和WIN32S上, 然后在WIN95上测试应用软件. 
 
PORTTOOL 
 
用户可以在他的应用软件中加入许多特征, 以利用基础平台. 这些特征包括线程, 增强 
的超文件, 多媒体, 通讯, 网络, 高级图形, 安全等等. 用户可以利用DEV LIBRARY中 
的"WRITING GREAT WIN32 APPLICATIONS"表帮助确定各个平台所能提供的功能. 用户 
然后就可以决定在他的应用软件中加入哪些特征以及如何使应用软件可以在多个平台运 
行. 
下面通过修改后的PORTTOOL样本来介绍线程. PORTTOOL使得WIN95和WINNT支持线程, 但 
在WIN32S运行时它却使得线程无效. 同样, 在WIN95上运行时, PORTTOOL使得一个小图标 
可以由WIN95外壳显示. 当屏幕分辨率发生变化时它也弹出对话框, 以显示应用软件能 
够对PNP事件作出反应. 
当然, 一个实际的应用软件所要做的事情远远超过一个对话框. 进一步地, 当PORTTOOL 
运行在安装有双处理器的NT系统上时, 它将自动利用双处理器的优点, 每个线程在两个 
处理器之间均匀分配. 些外, 运行在NT和WIN95上的PORTTOOL支持长文件名, 而WIN32S 
要用8.3文件名. 所有这些都可以发生在一次执行过程中! 
下列显示如何探测用户的应用软件运行所依赖的平台及如何利用平台之间的不同. 这些 
都非常容易. 当PORTTOOL运行在WIN3.X WITH WIN32S上时, 下述摘自PORTTOOL.C的代码 
片断的背景选择无效. 
    //获得OS版本信息, 并存储在一个全局变量中 
    dwVersion = GetVersion() 
    ... ... 
    //处理不同平台 
    if( dwVersion < 0x80000000 ) { 
      //Windows NT 
    } else if( LOBYTE(LOWORD(dwVersion())) < 4 ) { 
      //Win32s 
      //由于不能使用线程, 所以background porting 无效 
      EnableMenuItem( GetMenu(hWnd), IDM_PORTBKGND, MF_GRAYED ) 
    }  else{ 
    // Windows 95 
    } 
 
WINDOWS 95 代码键 
 
作为开始, 在几个工具的帮助下, 用户既可以把16位基于WINDOWS的应用软件移植到 
WIN32的, 支持OLE的应用软件中, 也可以重新开发WIN32的, 支持OLE的应用软件. 利用 
USER INTERFACE DESIGN GUIDE, 用户可以在使用现有对话框及正确理解新控件的条件 
下准备应用软件来开拓WIN95. 用户可以利用"Writing Great Win32 Applications"表 
的帮助来了解三个平台提供的功能. 当用户准备在目标平台上测试应用软件, 用户有 
理由相信, 在NT和WIN32S上均可运行的应用软件一定也可以在WINDOWS95上运行. 
同于不同的平台有不同的特征, 在三个平台上都测试一下应用软件是极其重要的. 平台 
之间的不同主要包括: 
  .WIN95和NT均是抢占式运行多任务环境, 为基于WIN32的应用软件提供分离的受保护 
地址空间, 而WIN3.X with WIN32S是一个非抢占式运行多任务环境, 在该环境里所有 
应用软件共离相同的地相空间. 
  .WINDOWS 3.X with WIN32S 有一个同步输入队列. WIN95 和NT有不同步的输入队列. 
  .WIN32S运行在WINDOWS 3.X上, 因此和WINDOWS 3.X一样, 只能为GDI( 图形设备接口) 
区提供64K存储空间. 相反, WIN95 和NT在32位堆以外分配区域, 因此, 区域可以和可 
提供的存储空间一样大. 
  .WINDOWS3.X with WIN32S和WIN95有16位全局坐标系统, 该系统限制图文的X和Y坐标 
在32K字节范围之内. NT使用32位全局坐标系统, 允许图文的X和Y坐标达到2BG字节.  
如果32位数值传送到文本和图形函数, WIN32S和WIN95在执行请求操作之前截去坐标的 
高16位. 
 
创建一个大型WINDOWS95应用软件所要做的最重要的十件事情 
 
10.在所有的WINDOWS平台上测试应用软件. 
9.在系统注册处登记大小图标, 缺省动词等. 
8.监视PNP事件. 
7.支持长文件名和UNC路径名. 
6.使用通用控件和对话框. 
5.遵循USER INTERFACE DESIGN GUIDE. 
4.注册OLE CLASS ID. 
3.在OLE 2.0复合文件中驻留SUMMARY信息流. 
2.实现OLE 2.0拖放功能. 
1.使用WIN32 API. 
 

0 0

相关博文

我的热门文章

img
取 消
img