WTL体系结构
绪论
WTL最终来了,而且提供了我所希望的功能.我在WTL Bytesize(译文)的文章列出WTL主要特征.在本文中,我将描述一下WTL的体系结构,同时我会给出一些简单的例子来演示如何使用它的那些特征.希望能够对您有所帮助.
WTL应用程序的类型
WTL有好几种应用程序类型,供您在AppWizard选取.
下表对这些应用程序进行了描述. 这种弹性构成了WTL体系结构的一部分.
应用程序类型
描述
SDI Application
单文本界面 – 只有一个窗口
Multiple Threads SDI
单个进程拥有一个或多个窗口
MDI Application
多文本界面 – 在框架内,您可以有零个或多个子窗口
Dialog Based
基于对话框模版
你可能还是首次听说多线程SDI应用程序,但是不用担心,它的概念很容易理解.一个多线程SDI程序启动后它会有一个窗口, 窗口显示了一个文档. 当你想要程序要再创建一个文档时,问题就出现了--SDI程序只能显示一个文档.为了解决这个问题,多线程SDI创建了另一个SDI窗口.看起来是一个新的实例在运行,实际上它不过是原来的进程创建了一个新的窗口,并把它依附到进程的一个新线程. IE的新建窗口就是这样做的.
除了多线程SDI,所有这些应用程序都可以作为COM服务器, 并且应用程序向导(AppWizard)为此提供了一个选项.另外应用程序向导还可以让你指定该程序是否主持ActiveX控件.令人费解的是,不同的程序类型,选取"Host ActiveX Controls"的地方不同.除对话框应用程序外的其他类型在第一页上选取,而对话框类型却放到第二页.
第二页的其他选项,对对话框程序以外的类型都是可用的.它们让你指定程序是否需要工具条(toolbar),状态条(status bar)和视窗口(View Window).
如果选取了"Toolbar"选项,你可以通过"Rebar"选择是否将工具条放入IE Rebar控件中. 如果你选取了Rebar, 你就可以通过框架窗口(frame window)的成员m_hWndToolBar(后边会有详细的描述)来访问它.你可以按照你的意愿,在里边加入其他的工具条. 选取了"Rebar"后, 你可以决定是否选取"Command Bar". Command bar很像CE的command bar控件.只是WTL是用一个类来实现,而在CE, command bar是一个系统窗口类(system window class). Command bar非常有用,它能够把窗口也加入到工具条中去. 如果你选取了这个选项, 工具条和菜单都将被当做toolbar来实现.这使菜单项也可以有关联的图标,并且当你移动鼠标到一个菜单项上时,该菜单项会被置成高亮.从Office 97以来, Office软件的菜单都具有上述特征.
第二页还有指定程序是否使用视的选项(多半你想要使用), 同时你可以决定这些视如何实现. 下表列出了所有可选的视.
视
描述
Generic Window
一个简单的窗口. 此类窗口允许程序员编写WM_PAINT消息的处理函数. 适用于需要直接进行paint的文档.
Form
这类视具有一个对话框模版.适用于带ActiveX 控件的窗口. 应用程序来操作这些控件.
List Box
这个视是个list box.它最简单的形式意味着可以通过调用AddString() 方法来添加字符串.
Edit
这个视是个edit control. 本质上,它提供了一个像Notepad一样的程序.
List View
这个视是个list view 通用控件.用这个控件来显示相关的项(比如, 控制面板是一个Explorer主持的List View, 所有的项都是控制面板applet).
Tree View
这个视是个tree view 通用控件. 这个适用于具有层次关系的数据,比如,可以用它来显示数据库的schema. 顶层分支为表和存储过程,次级的分支为表中的字段.
Rich Edit
这个视是个rich edit 控件,像WordPad.
HTML Page
这个视主持了一个IE Web Browser 控件. 它把主持的一个web page当成一个视.
本文的例子需要一个对话框模版,同时还需要菜单,因此Form view是个理想的选择.
(未完待续)