小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

用WTL構(gòu)建HTML界面應(yīng)用程序1

 Taylor 2005-10-23





主要針對(duì)有一定Windows編程經(jīng)驗(yàn)的讀者。閱讀本文需要對(duì)COM機(jī)制有一定的了解,最好掌握C++的STL,熟悉模板機(jī)制。本文假定您使用的是Visual C++(6.0以上版本),并正確安裝了WTL 7.0和完整的ATL(Visual C++組件),如果您沒有安裝Visual C++,請(qǐng)?zhí)^本文;如果您沒有安裝WTL 7.0,請(qǐng)看這里。

第0章 WTL介紹

ATL想必大家都不陌生,用VC寫COM或COM+組件,ATL能夠幫助我們完成不少工作。我個(gè)人比較喜歡ATL的運(yùn)作方式——實(shí)際上,除了初學(xué)COM時(shí)編寫的幾個(gè)示例組件之外,我?guī)缀鯖]有完全手工地起草過COM的C++源代碼——因?yàn)锳TL已經(jīng)完成了這些工作。

如果您不熟悉ATL的話,在這兒我先簡(jiǎn)單地介紹一下它。ATL是一組C++模板庫,最初設(shè)計(jì)它的目的為編程人員提供一個(gè)快捷的途徑來編寫快而小的COM組件。早期,它特別為實(shí)現(xiàn)多層次企業(yè)解決方案中的商業(yè)邏輯和數(shù)據(jù)訪問的自動(dòng)化組件而設(shè)計(jì)。最初的ATL版本中不包括對(duì)于界面的支持,但在2.0中,ATL開始包括那些用來支持界面控件的機(jī)制。

與MFC相比,ATL最大的優(yōu)勢(shì)就在于它是使用模板,而不是類繼承實(shí)現(xiàn)的。當(dāng)然它也有不足之處,即它不像MFC那樣容易編寫界面。通常的應(yīng)用中,ATL被用來編寫非界面的組件,例如,OLE DB、安全驗(yàn)證組件,等等。

對(duì)于我本人來說,ATL的優(yōu)勢(shì)是非常明顯的。MFC需要一些額外的消耗,因?yàn)镸FC需要支持界面的種種操作,需要支持許多我并不需要的特性(至少是所寫的程序中不需要),而由于采用的是類繼承,這些額外的設(shè)施將不得不被包括到最終的代碼中。靜態(tài)連接MFC庫需要增加數(shù)百KB,而動(dòng)態(tài)連接,盡管能夠有效地減小程序體積,但作為換湯不換藥的機(jī)制,仍然需要消耗比較多的內(nèi)存。通常對(duì)于組件而言,希望額外的東西越少越好——如果我不需要在屏幕上顯示窗口,那么窗口支持就是多余的;如果我不需要處理鼠標(biāo)事件,那么這段代碼就是多余的;而多余的代碼最好干脆不要出現(xiàn)。典型的網(wǎng)站服務(wù)中,更少的內(nèi)存占用無疑意味著更大的承載能力。

對(duì)于那些希望有良好界面的應(yīng)用程序開發(fā)人員來說,ATL的上述優(yōu)勢(shì)的吸引力也許并不大。然而,ATL的許多特性,特別是允許編寫更小、更快的代碼(與MFC相比),以及對(duì)于COM的與生俱來的支持,促使Microsoft在ATL中加入了對(duì)編寫普通Windows程序的支持。

按照Microsoft的說法,WTL是使用了這些支持的對(duì)ATL的一組擴(kuò)展。它包括了一組擴(kuò)展ATL的類,使它能夠支持更為復(fù)雜的,包括應(yīng)用程序和各種用戶界面組件,同時(shí)保持ATL最大的好處——能夠編寫小而快的代碼。WTL的目標(biāo)是成為最好和最簡(jiǎn)單的實(shí)現(xiàn)基于Win32和ATL的應(yīng)用程序、服務(wù)器和控件的方法。

盡管WTL現(xiàn)在還不能像MFC那樣方便地用來編寫應(yīng)用程序,但它已經(jīng)足以在許多地方替代MFC,當(dāng)然,使用它的開發(fā)者也就同時(shí)得到了它所帶來的好處——緊湊而高效的代碼。隨著基于HTML頁面制作程序界面這一新興潮流的興起,使用WTL將不再是一種“另類”的做法。

在本系列的文章中,我將一步一步地帶領(lǐng)大家實(shí)現(xiàn)一個(gè)采用HTML頁面作為界面的應(yīng)用程序。如果你是一個(gè)網(wǎng)頁設(shè)計(jì)高手的話,那么你將很快地發(fā)現(xiàn)制作一個(gè)漂亮的Windows應(yīng)用程序是如此的得心應(yīng)手;即使您原來非常熟悉Windows應(yīng)用程序的界面設(shè)計(jì),您也會(huì)發(fā)現(xiàn),使用HTML來設(shè)計(jì)程序界面是一個(gè)不錯(cuò)的主意——它將極大地縮短界面的設(shè)計(jì)時(shí)間,并且,與您處于同一個(gè)開發(fā)組的其他設(shè)計(jì)人員將能夠更容易地幫助您做好界面設(shè)計(jì)工作,因?yàn)榫帉慔TML界面不需要特別的程序設(shè)計(jì)經(jīng)驗(yàn)。

第1章 WTL入門

不熟悉COM、ATL都沒有關(guān)系,因?yàn)閃TL是一件容易學(xué)會(huì)的工具。下載之后,執(zhí)行自解壓程序,它將會(huì)把WTL復(fù)制到你的硬盤上的某個(gè)位置。隨后,執(zhí)行與VC版本對(duì)應(yīng)的AppWizard安裝程序(一個(gè)js文件),并在VC環(huán)境中適當(dāng)?shù)嘏渲肐nclude文件的位置就可以開始使用WTL了。

在開始寫程序之前,我還需要嘮叨一些關(guān)于WTL中宏定義。與MFC一樣,ATL/WTL也使用了宏。我并不打算介紹全部這些宏,但幾個(gè)常用的無疑能夠幫助你理解WTL向?qū)傻拇a:

宏名稱 描述
ALT_MSG_MAP 標(biāo)記新的ATL消息映射的開始
ATLASSERT ATLASSERT宏將執(zhí)行與C運(yùn)行環(huán)境庫中_ASSERTE宏同樣的功能
ATLTRACE, ATLTRACE2 在諸如調(diào)試窗口的輸出設(shè)備中顯示信息,具體顯示什么與調(diào)試狀態(tài)和級(jí)別有關(guān)。ATLTRACE2是目前推薦的宏,而ATLTRACE主要是為了兼容以前的代碼
BEGIN_MSG_MAP 標(biāo)記默認(rèn)消息映射的開始
CHAIN_MSG_MAP, CHAIN_MSG_MAP_ALT, CHAIN_MSG_MAP_ALT_MEMBER, CHAIN_MSG_MAP_DYNAMIC, CHAIN_MSG_MAP_MEMBER, COMMAND_HANDLER, MESSAGE_HANDLER, MESSAGE_RANGE_HANDLER 定義一個(gè)消息映射項(xiàng)目
DECLARE_WND_CLASS 指定新窗口類的名字。通常在ATL ActiveX控件的控制類中使用
END_MSG_MAP 標(biāo)記消息映射的結(jié)束
WM_FORWARDMSG 將消息轉(zhuǎn)發(fā)到別的窗口

以及幾個(gè)智能指針類,以及我們可能會(huì)用到的ATL類。智能指針類可以幫助你更好地撰寫程序,并避免內(nèi)存泄漏等問題。

描述
CAtlWinModule (ATL 7)為所有需要窗口特性的ATL提供支持的類
CAtlExeModuleT 包括用于創(chuàng)建EXE文件所需要的代碼的類
CAtlFile 對(duì)Windows文件API進(jìn)行的封裝的類
CAtlFileMapping 對(duì)Windows內(nèi)存映射文件API進(jìn)行封裝的類(限于篇幅,我不打算對(duì)這個(gè)類的內(nèi)部構(gòu)造進(jìn)行詳細(xì)介紹)
CAutoPtr 普通的智能指針類
CAutoPtrArray 用于建立智能指針數(shù)組
CAutoPtrList 用于建立智能指針表
CAutoVectorPtr 用于建立智能指針向量(類似C++ vector)
CAxWindow 管理作為ActiveX控件宿主窗口的類
CComBSTR 對(duì)于BSTR(類似Basic字符串,限于篇幅將不作詳細(xì)介紹)的封裝
CComPtr 管理COM接口指針的智能指針類
CComQIPtr 同上。具體區(qū)別將在后文介紹
CComVariant 對(duì)于VARIANT類型的封裝
CWindow 管理窗口
CWindowImpl 創(chuàng)建和繼承窗口

限于篇幅,我不打算介紹WTL的類——除非在后面的文字中提到它們。這里列出它們的名字,WTL的類包括CAppModule,CServerAppModule,CMessageLoop,CMessageFilter,CIdleHandler,CFrameWindowImplBase,CFrameWindowImpl,COwnerDraw,CDialogResize,CMDIWindow,CMDIFrameWindowImpl,CMDIChildWindowImpl,CUpdateUIBase,CUpdateUI,CStatic,CButton,CListBox,CComboBox,CEdit,CEditCommands,CScrollBar,CImageList,CListViewCtrl,CTreeViewCtrl,CTreeItem,CTreeViewCtrlEx,CHeaderCtrl,CToolBarCtrl,CStatusBarCtrl,CTabCtrl,CToolTipCtrl,CToolInfo,CTrackBarCtrl,CUpDownCtrl,CProgressBarCtrl,CHotKeyCtrl,CAnimateCtrl,CRichEditCtrl,CRichEditCommands,CDragListBox,CDragListNotifyImpl,CReBarCtrl,CComboBoxEx,CDateTimePickerCtrl,CFlatScrollBarImpl,CFlatScrollBar,CIPAddressCtrl,CMonthCalendarCtrl,CCustomDraw,CPropertySheetWindow,CPropertySheetImpl,CPropertySheet,CPropertyPageWindow,CPropertyPageImpl,CPropertyPage,CAxPropertyPageImpl,CAxPropertyPage,CFileDialogImpl,CFileDialog,CFolderDialogImpl,CFolderDialog,CFontDialogImpl,CFontDialog,CRichEditFontDialogImpl,CRichEditFontDialog,CColorDialogImpl,CColorDialog,CPrintDialogImpl,CPrintDialog,CPrintDialogExImpl,CPrintDialogEx,CPageSetupDialogImpl,CPageSetupDialog,CFindReplaceDialogImpl,CFindReplaceDialog,CMenu,CDC,CPaintDC,CClientDC,CWindowDC,CPen,CBrush,CFont,CBitmap,CPalette,CRgn,CCommandBarCtrlImpl,CCommandBarCtrl,CBitmapButtonImpl,CBitmapButton,CCheckListViewCtrlImpl,CCheckListViewCtrl,CHyperLinkImpl,CHyperLink,CWaitCursor,CMultiPaneStatusBarCtrlImpl,CMultiPaneStatusBarCtrl,CPaneContainerImpl,CPaneContainer,CScrollImpl,CScrollWindowImpl,CMapScrollImpl,CMapScrollWindowImpl,CSplitterImpl,CSplitterWindowImpl,CSplitterWindow,CTheme,CThemeImpl,CPrinterInfo,CPrinter,CDevMode,CPrinterDC,CPrintJobInfo,CPrintJob,CPrintPreview,CPrintPreviewWindow,CSize,CPoint,CRect,CString,CWinDataExchange,CRecentDocumentList。許多類對(duì)于MFC程序員來說是非常熟悉的,僅從類名我們就可以看出,WTL具有相當(dāng)強(qiáng)大的界面支持。與MFC不同,WTL并不是一個(gè)框架——它不強(qiáng)加任何應(yīng)用程序模型,并能夠適應(yīng)幾乎所有的應(yīng)用程序模型。WTL基本上是模板庫,這不僅意味著它包括了全部源代碼,并且,也意味著只需要實(shí)例化使用到的那些數(shù)據(jù)結(jié)構(gòu)和內(nèi)聯(lián)函數(shù),從而得到盡可能小的代碼。

第2章 使用WTL應(yīng)用程序向?qū)?/h3>

Visual C++ 7和Visual C++ 6中的WTL應(yīng)用程序向?qū)У慕缑娌町惐容^大(內(nèi)容相同)。為了創(chuàng)建一個(gè)支持HTML界面的應(yīng)用程序,需要作如下選擇:

首先是選擇WTL應(yīng)用程序向?qū)В缓?/p>

選擇SDI應(yīng)用程序,最后,

將View窗口的類型選定為HTML Page,并去掉Toolbar, Rebar, Command Bar, Status Bar這些特性。

假定我們?cè)诘谝徊街休斎氲墓こ堂Q為webui,則我們將拿到一組文件:stdafx.cpp、stdafx.h(這個(gè)就不用說了吧?),webui.cpp(程序?qū)崿F(xiàn)),MainFrm.h(CMainFrame類),webuiView.h(CWebuiView類),AboutDlg.h(CAboutDlg類),resource.h(資源定義),以及一組資源文件。

現(xiàn)在程序已經(jīng)可以運(yùn)行了,其界面類似下圖:

其中,白色部分將出現(xiàn)Microsoft的主頁,如果連著網(wǎng)的話。

接下來的部分中,我將拆開向?qū)傻倪@些源代碼,并介紹其執(zhí)行過程。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多