唉,說(shuō)來(lái)慚愧。記得在前面說(shuō)過,打算在五一期間研究下PPC上怎么給程序換膚,結(jié)果計(jì)劃不如變化:拜見未來(lái)的岳父岳母花了3天,同學(xué)結(jié)婚花了一天?;貋?lái)后,也沒啥心思搞了,不過大概還是知道些東西。要通過hook技術(shù)達(dá)到換膚的方法,還是比較困難地啊。好了,過去的不說(shuō)了。不過,以后我有機(jī)會(huì)還是會(huì)繼續(xù)搞搞(現(xiàn)階段懂的還是少啊)。
現(xiàn)在切入正題:WTL 。什么是WTL?WTL 的全稱為 Windows Template Library, 是微軟ATL開發(fā)組成員Nenad Stefanovic先生在ATL Windowing機(jī)制上發(fā)展起來(lái)的一整套GUI框架。它運(yùn)用模板(template)技術(shù)組織和創(chuàng)建GUI對(duì)象,構(gòu)成了精制的面向?qū)ο罂蚣?,使面向?qū)ο笈c模板達(dá)成了精制的融合。
上面就是WTL的定義,準(zhǔn)確地描述了什么是WTL。請(qǐng)注意我用紅色標(biāo)記的兩個(gè)地方,那可以說(shuō)是WTL的精髓。首先,WTL其實(shí)基于ATL的,它是ATL面向GUI編程的擴(kuò)展;其次,WTL運(yùn)用模板技術(shù),這樣構(gòu)建的程序精致短小。
需要指出的是WTL目前不被微軟官方支持也沒有開發(fā)文檔,不過能夠在其官方網(wǎng)站下到sdk。WTL貌似在民間非常受歡迎,用過的人都說(shuō)好, 甚至有人說(shuō)會(huì)超過MFC?,F(xiàn)在最新版的WTL是8.0 beta2版,07年5月28日才發(fā)布的。
對(duì)比WTL和MFC,他們大部分是相通的。對(duì)于一個(gè)有過MFC編程經(jīng)驗(yàn)的人來(lái)說(shuō),熟悉WTL還是比較容易的。下面是他們的比較
Feature
| MFC
| WTL
|
Stand-alone library
| Yes
| No (built on ATL)
|
AppWizard support
| Yes
| Yes
|
ClassWizard support
| Yes
| No
|
Officially supported by Microsoft
| Yes
| No (Supported by volunteers inside MS)
|
Support for OLE Documents
| Yes
| No
|
Support for Views
| Yes
| Yes
|
Support for Documents
| Yes
| No
|
Basic Win32 & Common Control Wrappers
| Yes
| Yes
|
Advanced Common Control Wrappers (Flat scrollbar, IP Address, Pager Control, etc.)
| No
| Yes
|
Command Bar support (including bitmapped context menus)
| No (MFC does provide dialog bars)
| Yes
|
CString
| Yes
| Yes
|
GDI wrappers
| Yes
| Yes
|
Helper classes (CRect, Cpoint, etc.)
| Yes
| Yes
|
Property Sheets/Wizards
| Yes
| Yes
|
SDI, MDI support
| Yes
| Yes
|
Multi-SDI support
| No
| Yes
|
MRU Support
| Yes
| Yes
|
Docking Windows/Bars
| Yes
| No
|
Splitters
| Yes
| Yes
|
DDX
| Yes
| Yes (not as extensive as MFC)
|
Printing/Print Preview
| Yes
| Yes
|
Scrollable Views
| Yes
| Yes
|
Custom Draw/Owner Draw Wrapper
| No
| Yes
|
Message/Command Routing
| Yes
| Yes
|
Common Dialogs
| Yes
| Yes
|
HTML Views
| Yes
| Yes
|
Single Instance Applications
| No
| No
|
UI Updating
| Yes
| Yes
|
Template-based
| No
| Yes
|
Size of a statically linked do-nothing SDI application with toolbar, status bar, and menu
| 228KB + MSVCRT.DLL (288KB)
| 24k (with /OPT:NOWIN98) (+ MSVCRT.DLL if you use CString)
|
Size of a dynamically linked do-nothing SDI application with toolbar, status bar, and menu
| 24KB + MFC42.DLL (972KB) + MSVCRT.DLL (288KB)
| N/A
|
Runtime Dependencies
| CRT (+ MFC42.DLL, if dynamically linked)
| None (CRT if you use CString) |
聽說(shuō)從WTL7.5開始支持PPC上編程,這可讓我大為開心。有機(jī)會(huì)試試用WTL在PPC上寫個(gè)程序。