青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 3, comments - 0, trackbacks - 0, articles - 1

2006年2月16日

引言:

       現(xiàn)在的應(yīng)用軟件都講究個性化,因此提供一套漂亮的皮膚就必不可少。這就需要用到一些控件膚化技術(shù)。常規(guī)是重載MFC的消息列表或虛函數(shù)來實現(xiàn)的,但引來的問題是膚化庫和應(yīng)用程序的耦合性太強(qiáng)。經(jīng)常會由于膚化代碼的一處小改動而引起邏輯上并沒有關(guān)聯(lián)的整個應(yīng)用程序大規(guī)模的編譯和鏈接,并帶來開發(fā)效率的急劇下降,這在開發(fā)大型軟件時是很難忍受的。

       本文在參考了一些常用膚化技術(shù)后提供了自己的解決方案:采用替換窗體過程,皮膚庫高度獨立,內(nèi)部完善與修改毫不影響應(yīng)用程序。

 

常見膚化方法:

第一種:利用繼承關(guān)系直接子類化

第二種:在一個對話框的 OnInitDialog 中逐控件子類化

第三種:在 Hook 中攔截窗口創(chuàng)建消息,并進(jìn)行子類化

第四種 SetWindowLong替換窗口過程

第五種 Hook中替換窗口過程

各種膚化技術(shù)的原理:

第一類方法采用的是MFC子類化方法來實現(xiàn)(前三種)

1.                MFC 通過維護(hù)內(nèi)部一張ChandleMap來記錄Window控件與控件子類對象之間的關(guān)系。在MFC的全局窗口過程AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)中,通過調(diào)用CWnd::FromHandlePermanent(HWND hWnd)得到參數(shù)句柄所依附的C+控件子類對象,并調(diào)用虛函數(shù)CWnd::WindowProc將相應(yīng)的消息送給相應(yīng)的控件子類對象的窗口過程

2.         控件子類對象調(diào)用CWnd::SubclassWindow登記控件與控件子類對象之間的關(guān)系

第二類方法采用替換窗口過程方法來實現(xiàn)(第四、五種)

膚化技術(shù)分析:

MFC采用具有層次結(jié)構(gòu)的控件子類設(shè)計:通過一張Map表建立控件句柄與C++對象(控件子類對象)的聯(lián)系,通過控件子類對象的變量來記錄和維護(hù)控件的狀態(tài)信息

“膚化”的本質(zhì):

1)響應(yīng)發(fā)送給該控件的Windows消息,

2)用恰當(dāng)?shù)臄?shù)據(jù)表現(xiàn)出恰當(dāng)?shù)男袨椤?/SPAN>

其中:

1)可以用替換窗體過程來實現(xiàn),

2)可以用維護(hù)自定義控件子類對象和控件句柄的關(guān)系來實現(xiàn)。

 

本文獨立膚化庫采用的方法:

1.       目標(biāo):

膚化目標(biāo)窗口,接口簡單,并且被膚化的窗口影響小。

2.         采用方法:

替換窗口過程

3.       難點

窗口過程的設(shè)計,是否需要為每個類都設(shè)計單獨的窗口過程?工作量是否過大?

維護(hù)狀態(tài)變量,當(dāng)有多個控件共享同一窗口過程時,如何維護(hù)它們各自的狀態(tài)?

實現(xiàn)方法:

1.         仿照MFC,建立統(tǒng)一的窗體過程SkinWndProc

2.         建立一張Map表,用來登記hWnd和自定義控件子類對象之間的聯(lián)系。

3.         創(chuàng)建一個皮膚父類,所有的膚化控件均從它派生(類似與MFCCWnd),可以在統(tǒng)一的窗體過程SkinWndProc中通過Map表找到相應(yīng)的自定義控件子類對象,并調(diào)用其虛函數(shù)實現(xiàn)對Windows消息的響應(yīng)

4.         重載:SubclassWindow函數(shù),用來完成窗體過程的替換。

外部接口:

1.         提供SkinDlg(HWND hWnd)完成對對話框及其子控件的膚化

2.         提供SkinBtn(HWND hWnd, LPCTSTR lpszSection)指定采用配制文件的哪一節(jié)屬性膚化按鈕

3.         如果需要,提供DonotSkinCtrl(HWND hWnd)用來指定不需要膚化的控件

4.         提供ChangeSkinLPCTSTR lpszSkinName)更換皮膚

框架原理圖:
框架原理圖.bmp

時序圖:

時序圖:.bmp

posted @ 2006-02-16 22:46 VC進(jìn)階| 編輯 收藏

2006年2月13日

引言:

       在上一篇文章中,我們引入了一個組件化編程的架構(gòu),其實它是一個仿COM架構(gòu)。盡管相對于COM而言它已經(jīng)相當(dāng)?shù)暮唵瘟耍偟膩碚f它仍是比較復(fù)雜。本文引入了另一種組件化編程的實現(xiàn)架構(gòu),相對于仿COM篇而言,它的結(jié)構(gòu)更加清晰,實現(xiàn)更加簡單。

 

組件化編程再分析:

       其實引入組件化編程的關(guān)鍵目的是為了將程序模塊化,使各個模塊之間可以單獨開發(fā),單獨測試。當(dāng)然,隨之而來的DLL版本問題也必須要解決,防止出現(xiàn)不兼容的組件版本破壞程序的穩(wěn)定性。只需要達(dá)到幾個目的就行了,我們沒必要把事情做得太過于復(fù)雜。

 

實現(xiàn):

       將程序模塊化,使之可以單獨開發(fā)、測試而不影響其它的模塊,仍然需要將每個模塊分解到DLL去實現(xiàn)。通常因為面向?qū)ο蟆⒑瘮?shù)同名、函數(shù)地址偏移,使用方便等等原因,我們不希望直接使用DLL導(dǎo)出API,而希望能使用接口,以面向?qū)ο蟮姆绞骄幊獭榱私鉀Q版本問題,我們給每個接口的實現(xiàn)版本加個標(biāo)示。既我們可以要求DLL給出1.0版的接口實現(xiàn)。2.0版的接口實現(xiàn)等。還有,我們還要告訴DLL我們想獲得哪個接口。于是統(tǒng)一起來,給每個接口加個唯一ID,因為通常我們的程序不會在全球發(fā)行,所以也沒必要使用GUID,使用字符串標(biāo)示就行了。

每個接口的實現(xiàn)都有自己的創(chuàng)建函數(shù),所以我們在每個模塊中建立一張表,維護(hù)接口標(biāo)示與接口創(chuàng)建函數(shù)的關(guān)系

接口標(biāo)示

全局創(chuàng)建函數(shù)

“VUIManager001”

__g_CreateVUIManager001interfaceNam_reg()

“VUIManager002”

__g_CreateVUIManager002interfaceNam_reg()

“VSkin001”

__g_CreateVSkin001interfaceNam_reg()

“VSkin002”

__g_CreateVSkin002interfaceNam_reg()

DLL中導(dǎo)出接口創(chuàng)建API

 DLL_EXPORT void*CreateInterface(const char *pInterfaceName, int *pReturnCode);

簡化接口的創(chuàng)建過程.bmp
小結(jié):

       本實現(xiàn)僅是組件化編程的一個簡化實現(xiàn),它并不能取代《仿COM篇》,它所實現(xiàn)的功能也不如《仿COM篇》那么強(qiáng)大,例如它需要實現(xiàn)知道接口所在的DLL,不能實現(xiàn)自擴(kuò)展等。但對于一般的程序而言,它更簡單使用。

還可以使用宏定義 把接口標(biāo)示和接口創(chuàng)建函數(shù)與創(chuàng)建過程關(guān)聯(lián)起來,將接口創(chuàng)建API也包裝起來,開發(fā)中將更加方便。只需一個宏就可以搞定這些操作。

posted @ 2006-02-13 21:55 VC進(jìn)階| 編輯 收藏

2006年1月25日

     摘要: 引言:        在大型項目的開發(fā)中,隨著開發(fā)進(jìn)度的進(jìn)行,我們經(jīng)常碰到模塊之間耦合度太高的問題:由于開發(fā)人員經(jīng)常要在別的模塊中調(diào)用自己實現(xiàn)的功能,經(jīng)常隨意在某個函數(shù)中隨意添加調(diào)用代碼,造成了被修改的那個函數(shù)體過長,邏輯混亂。另一個問題是隨意包含頭文件:開發(fā)人員在開發(fā)中經(jīng)常為了要使用某些類的功能而包含引用類的頭文件造成類之間的耦合度太...  閱讀全文

posted @ 2006-01-25 21:07 VC進(jìn)階| 編輯 收藏

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区大片| 亚洲国产精品日韩| 亚洲欧洲三级| 国产亚洲欧美日韩日本| 99亚洲一区二区| 日韩午夜在线播放| 久久一二三区| 久久亚洲国产成人| 国产日韩精品一区| 亚洲免费在线观看视频| 亚洲小视频在线观看| 免费成人激情视频| 欧美第一黄色网| 精品88久久久久88久久久| 亚洲免费在线精品一区| 亚洲欧美激情视频在线观看一区二区三区| 欧美sm视频| 亚洲国产精品悠悠久久琪琪| 在线观看视频亚洲| 久久免费观看视频| 久久全球大尺度高清视频| 国产日韩高清一区二区三区在线| 亚洲视频一区二区| 亚洲欧美日韩国产一区| 国产精品伦子伦免费视频| 一区二区三区福利| 亚洲免费在线观看| 国产欧美精品一区二区三区介绍 | 99re6热在线精品视频播放速度| 亚洲国产精品一区制服丝袜| 久久综合九色综合网站| 欧美88av| 日韩一区二区精品| 欧美视频一区二区三区…| 99视频精品全部免费在线| 亚洲一区二区高清| 国产人久久人人人人爽| 欧美亚洲网站| 欧美va天堂| 亚洲三级影片| 欧美午夜一区二区三区免费大片| 亚洲天堂免费观看| 久久久久国产精品一区二区| 在线不卡中文字幕| 欧美精品免费在线| 亚洲免费在线观看| 你懂的亚洲视频| 一本色道久久88亚洲综合88| 国产精品久久久一区麻豆最新章节 | 亚洲精品久久久一区二区三区| 欧美电影在线免费观看网站| 一本久道综合久久精品| 欧美伊人影院| 亚洲日本中文| 国产精品亚洲а∨天堂免在线| 久久久国产成人精品| 亚洲国产一区在线观看| 欧美一区二区三区在| 在线播放中文字幕一区| 欧美日韩国产成人在线免费| 亚洲欧美另类在线| 亚洲国产欧洲综合997久久| 性久久久久久久久| 亚洲精品在线看| 国产午夜精品美女视频明星a级| 裸体一区二区三区| 午夜精品久久久久久久99黑人| 欧美r片在线| 欧美一区二区三区四区在线观看| 亚洲国产一区二区三区青草影视 | 亚洲欧美激情诱惑| 亚洲国产精品999| 国产精品一区二区在线观看网站| 亚洲第一精品夜夜躁人人爽| 亚洲精品少妇网址| 亚洲国产视频一区| 国产精品麻豆va在线播放| 久久久综合网| 午夜精品久久久久久久久| 亚洲国产91| 久久亚洲国产成人| 欧美一区二区黄色| 亚洲私拍自拍| 亚洲免费成人| 亚洲国产高清一区| 黄色成人av在线| 国产欧美一区二区白浆黑人| 欧美三级中文字幕在线观看| 男女av一区三区二区色多| 久久精品国产亚洲5555| 亚洲在线免费| 中日韩男男gay无套| 91久久久精品| 亚洲国产成人久久综合一区| 久久综合狠狠综合久久激情| 99精品国产在热久久下载| 免费观看在线综合色| 欧美午夜不卡在线观看免费| 欧美a级片网| 久久青草欧美一区二区三区| 欧美一区二视频| 欧美一级二级三级蜜桃| 午夜精品一区二区三区四区| 亚洲淫片在线视频| 亚洲一区一卡| 香蕉精品999视频一区二区| 亚洲尤物影院| 先锋影音网一区二区| 性久久久久久久久久久久| 亚洲欧美bt| 久久国产精品99精品国产| 欧美制服第一页| 久久久777| 免费观看成人鲁鲁鲁鲁鲁视频| 久久理论片午夜琪琪电影网| 老司机一区二区三区| 免费看亚洲片| 欧美日韩视频在线第一区| 欧美视频在线观看免费| 国产精品色婷婷| 亚洲免费观看高清完整版在线观看熊 | 一本色道久久| 亚洲天堂视频在线观看| 亚洲一区3d动漫同人无遮挡| 亚洲一级片在线看| 欧美在线关看| 欧美va亚洲va日韩∨a综合色| 欧美韩日亚洲| 国产精品毛片a∨一区二区三区|国| 国产精品日日摸夜夜摸av| 国产亚洲欧洲997久久综合| 亚洲电影网站| 亚洲午夜国产一区99re久久| 欧美影院一区| 亚洲成人在线免费| 黄色成人精品网站| 亚洲午夜在线观看| 国产欧美一区二区三区久久| 欧美成人r级一区二区三区| 欧美日本一区| 国产午夜精品麻豆| 亚洲精品国精品久久99热一| 亚洲色诱最新| 久久这里只有| 99国产麻豆精品| 久久久久久九九九九| 欧美日本精品一区二区三区| 国产精品视频观看| 亚洲国内精品在线| 亚洲欧美一级二级三级| 麻豆av一区二区三区久久| 日韩小视频在线观看| 久久精品99国产精品酒店日本| 欧美黑人一区二区三区| 国产精品视频区| 91久久国产自产拍夜夜嗨| 午夜精品久久久久久| 欧美韩日一区| 欧美在线亚洲| 欧美性事免费在线观看| 亚洲狠狠丁香婷婷综合久久久| 新片速递亚洲合集欧美合集| 欧美成人资源| 欧美一区二区三区婷婷月色| 欧美久久在线| 亚洲高清视频一区二区| 欧美一区久久| 一区二区三区视频在线观看| 美女视频网站黄色亚洲| 国产日产欧产精品推荐色 | 国产日韩欧美在线播放| 一区二区欧美日韩视频| 免费久久99精品国产| 新狼窝色av性久久久久久| 欧美性一区二区| 一本到12不卡视频在线dvd | 久久久999| 亚洲免费中文| 国产精品美女久久久久久免费| 99视频一区二区| 91久久国产综合久久| 蜜桃av久久久亚洲精品| 影音先锋中文字幕一区| 久久亚洲精品欧美| 欧美在线观看网站| 国产视频精品免费播放| 欧美一区二视频| 亚洲欧洲av一区二区| 国产精品区一区二区三| 亚洲欧美日韩专区| 一区二区精品在线观看| 欧美色中文字幕| 亚洲主播在线播放| 亚洲少妇自拍| 国产精品网站在线观看| 香蕉久久夜色精品国产使用方法| 亚洲一区久久久| 国产亚洲人成a一在线v站| 久久久精品免费视频| 久久成年人视频|