从今个开始看英文版的Windows programming 5th,这是大侠Petzold的经典巨作,以前看中文版的没有看完,觉得翻译的很别扭!现在从头开始,看大侠的英语原作,希望收获会很大,当然,这是肯定的,重量级老大的文笔当然是没有的说。
学习Windows Programming,那么我应该首先搞清楚的是,Windows的核心概念是什么,它的架构是什么,然后基于它的应用程序应当是什么样的构架呢?如何利用它提供的平台呢?
进行Windows编程的基础包括,完整的Windows系统使用经验,C和C++编程经验也比较丰富了,(也可以基于其他库进行过Windows程序的开发),现在应该更加深入研究如何从纯的Win32平台去开发程序的时候了。
要了解Windows系统的核心概念,必须看看它的发展历程,那样才可以清楚的了解这些概念的来历。
MS-DOS,命令行接口 1981
Windows 1.0 窗口界面 1985
Windows 2.0 Overlapping窗口、菜单、对话框 1987
Windows 386 Virtual address memory and multitask
Windows 3.0 支持对Intel 286 386和486未处理器的16位保护模式操作,扩展可访问内存大小。1990
OS/2 PM 1988
Windows 3.1 TrueType字体,多媒体、对象连接和绑定,公共对话框, 1993
Windows NT,支持32位386,486和奔腾处理器,以及支持其他处理器。1993
Windows 95,对NT进行了精简,只支持32位。1995
Windows 98,加入对Internet的支持,改进效率,支持更多硬件。1998
98和NT都是32位抢占式多任务、多线程图形操作系统。
这就是Windows操作系统的核心概念之一:图形化用户接口GUI。
GUI和传统的字符窗口的不同在于,交互不再是单向的了,原有的字符窗口交互流程是:用户-键盘-程序-屏幕。而GUI使得屏幕本身也成为了输入端,屏幕上的各种图形控件,比如按钮、滚动条、菜单、对话框等,用户都可以通过形象的操作这些控件来表达自己的输入数据,所见即所得使得用户和程序的交互感更加直接。此外,所有Windows提供的GUI都具有默认的一致的操作接口,因为这些都是由操作系统自己来完成的。这就大大方便了用户的使用。
关于图形信息的输出,Windows系统做到了不依赖特定显示卡或打印机硬件,它对这些操作进行了封装,提供了统一的接口,开发者无需关心具体的硬件信息。
另外一个核心概念:多任务、多线程。
操作系统的多任务能力让用户感觉多个程序可以并行运行,它们由各自的窗口界面,可以在它们之间切换,也可以在其中传递数据。NT和98采用抢占式的多任务方式,并且单个程序本身也是可以划分为多线程来并行完成内部任务的。多任务和多线程的后台基础核心概念是强大的内存管理能力,它可以高效移动内存块的数据和代码。这就是虚拟内存管理技术,NT和98都是32位的虚拟内存管理。DLL是高效利用内存的一个代码共享的技术产品。
Windows系统的物理布局就是将操作系统的核心子系统功能分别封装在几个DLL中,所有Windows操作都基于这些DLL封装的功能。通常包括三个主要的子系统模块的封装:Kernel,它处理内存管理,文件IO,多任务处理等;User模块提供用户接口以及定义所有的Windows窗口逻辑;GDI模块封装了图形设备接口,提供用户写图形和文字到硬件设备上的功能。
总结,Windows系统编程的核心概念:GUI、多任务(多线程以及后台的内存管理能力),它的物理构架是子系统封装的DLL金字塔形式:最底层为Kernel + User + GDI。
其实,从本质上讲,几乎所有的现代操作系统都具备这些核心概念和架构,只是实现方式和Windows不太相同罢了。
问题在于,Windows实现的设计架构是什么呢??基于Windows开发程序,到底有什么特别的架构方式呢??
问题列表:
l Windows操作系统核心概念 (OK)
l Windows操作系统的物理架构 (OK)
l Windows实现的设计架构 (?)
l Windows应用程序的设计架构 (?)