WTL的簡介與安裝

 簡介: 

WTL 在開發者之間的悄悄傳播已經超過一年了, 傳聞它是基於ATL的,並在微軟內部使用.這理所當然的引起了ATL開發者社區的注意.這些人從ATL1.1開始,就一直爲ATL控件書寫UI代碼,但是他們發現,他們的所寫的代碼常常就是純的Win32 GDI代碼.我告訴您, WTL並沒有多大不同.是不是讓人失望? 不,因爲ATL只是對COM進行了簡單的封裝,這也是ATL的強大之處. 是的,寫ATL您必須通曉COM. 您在ATL上額外花費的功夫跟您學習COM所作的努力比起來,簡直微不足道.這跟那些需要把主要精力花費在學習類庫本身,忽略COM的庫是完全不同的.WTL與此類似.您需要懂得Win32窗口技術和GDI.只要您懂得,學習WTL就似清風撫面,再簡單不過了.如果您不懂 這些,那麼您最好使用VB來寫UI代碼.

WTL有什麼?

它給各種類型的應用程序提供了一個基本的框架.注意,雖然您沒有MFC那樣的文檔/視結構,但是您有視(views). 在WTL有大量的代碼讓您來管理視,而且加入您自己的代碼也很容易. WTL有AppWizard,可以讓您生成SDI, MDI 和多線程SDI程序多線程SDI跟IE或Windows Explorer很像.它看起來是打開了多個程序實例,實際上這些窗口都是屬於一個進程的.另外,您的程序可以是基於對話框的,也可以是基於視的.視可以是基於CWindowImpl的,也可以是基於控件,甚至是IE裏的一個HTML頁.您可以選擇您的程序是否需要一個rebar, command bar (CE-like), toolbar 和/或status bar.另外,您的程序可以主持ActiveX控件,以及成爲一個COM服務器.

這裏有幾個關於視的選項. WTL提供splitter窗口類(這樣在一個視裏您可以有兩個窗口)和scroll窗口類(這樣您的窗口可以比它顯示的"視"小). WTL也有個類似MFC的UpDateUI的東西,但是它們不是很一樣 - 主要的區別是您需要把需要更新的項用宏映射標註出來,然後您在您的類里加入執行UpdateUI的代碼. DDX/DDV在WTL也支持,同樣類似MFC,但有不同. 您必須加一個宏映射來實現DoDataExchange,然後加入調用它的代碼.現在WTL也有GDI類了.然而,HDC的封裝類就像CWindow一樣,只進行了很簡單的封裝 - 它幾乎沒有加入任何新的功能.不過,在WTL,你可以得到播放meta文件和OpenGL支持. 最有價值的我猜應該是打印機DC的那些繼承類 - WTL有打印機支持,甚至打印預覽. 當然也有GDI對象的封裝. 諸如畫筆,畫刷,區域等.WTL對所有的Win32 (和W2K) 通用對話框進行了封裝.同樣儘管簡單,但是它的確使請求字體或者文件變的非常的簡單.合成了舊的AtlControls.h,新加了一些封裝類. 這些封裝類封裝了W2K控件,以及一些不屬於Win32的"控件",像Command Bar, bitmap button, hyperlink 和 wait cursor.WTL 最終把消息分離帶入了ATL! 一些新的MSG映射宏將消息分離,調用您類裏的消息處理函數.消息處理函數的參數的值是從消息分離得到的.唯一令人頭痛的是,您需要查看頭文件以確定函數參數的意義.

最後,WTL還有一些實用類.最重要的是CString. 不錯,它是從MFC克隆得到的(copy on write),具有(在我知道的範圍內)MFC版本的所有方法.還有查找文件的API的封裝類,以及CRect, CSize and CPoint.如果您打算寫一個Win32 界面程序,我建議您在考慮MFC之前,先試試WTL.使用WTL來寫您的代碼, 程序將變得小巧些,也更有效率些.使用WTL, 您還將得到ATL支持COM好處.您可以在2000年一月份的平臺SDK中找到WTL.在MSI選項頁的Source Code section下.

安裝:

WTL全稱爲Window Template Library,一個構架於ATL之上的C++類庫,它包裝了大多數的窗口控制.從網上看的,也只是個大概的瞭解.先安裝了弄個Hello World試試吧,呵呵

1.1 下個WTL安裝包,其實上個壓縮包.現在最新的是8.0版,默認解壓目錄爲C:/WTL80,其中80爲版本號,如果下的是7.5則爲C:/WTL75

1.2 自動安裝

在目錄C:/WTL80/AppWiz有四個JS文件,選擇一個你機子上安裝的VC版本,點擊相應的JS腳本進行安裝即可,如VS2005的VC版本爲8.0,則相應文件爲setup80.js

1.3 手動安裝

自動安裝有時安裝不成功,如點擊文件後卻打開了一個記事本,其實手動安裝也挺不錯的.

將C:/WTL80/AppWiz/Files目錄下的三個WTLAppWiz.*文件考到VC安裝目錄的vcprojects目錄下,如E:/Program Files/Microsoft Visual Studio 8/VC/vcprojects, 打開WTLAppWiz.vsz,原文件爲:
VSWIZARD 7.0
Wizard=VsWizard.VsWizardEngine
Param="WIZARD_NAME = WTLAppWiz"
Param="WIZARD_VERSION = 7.0"
Param="ABSOLUTE_PATH = ."
Param="FALLBACK_LCID = 1033"
將其改爲
VSWIZARD 7.0
Wizard=VsWizard.VsWizardEngine.8.0
Param="WIZARD_NAME = WTLAppWiz"
Param="WIZARD_VERSION = 7.0"
Param="ABSOLUTE_PATH = C:/WTL80/AppWiz/Files"
Param="FALLBACK_LCID = 1033"
其中Wizard後面需加上WTL的版本號,否則能在VC裏看到WTL項目,但其嚮導無法工作
Param ="ABSOLUTE_PATH後加上WTL解壓的路徑

錯誤類型以及解決方案:

新將項目時選擇WTL項目,接默認選項生成項目,編譯時會報'atlapp.h': No such file or directory錯誤。需要加一個編譯路徑,工具-->選項-->項目和解決方案-->VC目錄,在左邊選擇包含文件,把WTL解壓目錄下的C:/WTL80/include路徑加上

如果編譯時報以下兩個Bug:
錯誤 1 fatal error CVT1100: 重複的資源。type:MANIFEST, name:1, language:0x0409 CVTRES
錯誤 2 fatal error LNK1123: 轉換到 COFF 期間失敗: 文件無效或損壞 sdf
則說明資源文件有問題,具體的原因未知,從網上找我資料看,有以下四種解決方法:
1、工程屬性->配置屬性-> 清單工具->輸入和輸出->嵌入清單,選擇[否]
2、打開rc文件,找MANIFEST,所屬段或行全去掉
3、打開此項目屬性頁,鏈接器-->嵌入的 IDL-->類型庫資源 ID 設一個從1-65535的值
4、項目屬性頁鏈接器-->清單 文件-->生成清單文件 選項設置爲no
在有的人的機子上第一、二種方法可以,三、四的不可以

個人意見:

將解壓縮後得到的include目錄下的所有頭文件複製到 ($VCDIR)/atlmfc/include

發佈了18 篇原創文章 · 獲贊 4 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章