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是个理想的选择.