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

隨筆 - 55  文章 - 15  trackbacks - 0
<2012年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿

隨筆分類

隨筆檔案

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

先來(lái)說(shuō)一下我學(xué)習(xí)這個(gè)東西的目的吧。
      剛開始接觸ATL和WTL是在11月份的時(shí)候,在公司的buffer里面待了無(wú)聊的兩個(gè)月,也沒有項(xiàng)目做。對(duì)于我這個(gè)剛畢業(yè)又不是計(jì)算機(jī)專業(yè),又找到了IT行業(yè)的菜鳥來(lái)說(shuō),沒有學(xué)習(xí)的目標(biāo)其實(shí)挺悲慘的,一度什么東西都學(xué),js,java。已經(jīng)在公司混了大概4,5個(gè)月了,一點(diǎn)長(zhǎng)勁都沒有,前途堪憂。

      雖然我學(xué)的不是計(jì)算機(jī)專業(yè),但好歹是電子信息學(xué)院的,本科研究生都接觸了點(diǎn)編程語(yǔ)言,尤其在找工作的時(shí)候瘋狂地補(bǔ)了一下c++相關(guān)知識(shí),所以對(duì)c/C++這方面的基礎(chǔ)知識(shí)還是有些了解的。但是苦于沒有項(xiàng)目經(jīng)驗(yàn)。想著我要回成都,這心里就沒底啊。

      還好有個(gè)外派到思科的職位,被我爭(zhēng)取來(lái)了,是做Windows下的產(chǎn)品維護(hù)。就是人家這個(gè)東西已經(jīng)做好了,現(xiàn)在已經(jīng)在做IOS的項(xiàng)目了,現(xiàn)在Windows下可能會(huì)報(bào)出些bug來(lái),就需要我來(lái)修復(fù)。在準(zhǔn)備面試的時(shí)候了解了一下關(guān)于ATL和COM方面的知識(shí),不過(guò)現(xiàn)在都忘了。之前遇到一個(gè)bug,就是有一個(gè)客戶在點(diǎn)擊其他地方的時(shí)候,我們的程序會(huì)跳出一個(gè)空白的對(duì)話框,并且不會(huì)消失。這屬于business card方面的知識(shí),我查了好久也沒確定出什么原因。最后發(fā)現(xiàn)了一個(gè)不確定的原因,可能是這個(gè)空白對(duì)話框沒有隱藏,被系統(tǒng)調(diào)出來(lái)了。經(jīng)歷過(guò)這次查bug,發(fā)現(xiàn)了整個(gè)邏輯應(yīng)該是什么樣子的。所以自己也想做一個(gè)聊天工具的東西,看到他們應(yīng)該是使用atl/wtl來(lái)做的,我就再來(lái)復(fù)習(xí)一下這方面的東西。

      今天看懂啊第四章了,把前面atl的知識(shí)也梳理一下吧。

      ATL是用來(lái)做UI的,不知道這句話說(shuō)的是不是狹隘了。其中的CWindow封裝了m_hwnd成員變量,把創(chuàng)建一個(gè)窗口,顯示窗口,消息循環(huán)的API函數(shù)全封裝進(jìn)了這個(gè)類中,從而更加面向?qū)ο蟆?br />
       ATL力爭(zhēng)做到簡(jiǎn)潔,快速,這也是它為什么采用了模板類來(lái)做的原因。去掉了vtable的開銷,并且最大限度地在編譯器確定調(diào)用的類型,這就是子類作為父類模板參數(shù)傳遞的原因,其中最重要的一句是:T* pt = static_cast<*T>(this);

      了解了這些,然后再了解一些模板類的概念,基本上ATL就這些了,接下來(lái)就是要對(duì)它封裝的類和宏的熟練應(yīng)用了,這就需要長(zhǎng)期的積累了。
      但是ATL對(duì)一些復(fù)雜的控件的支持不足,所以就出現(xiàn)了WTL,我不知道對(duì)不對(duì)哈,這句話先放在這里,以后再改。 

      好了,現(xiàn)在進(jìn)入今天的正題:
MFC程序員的WTL指南:PartIV--對(duì)話框與控件的學(xué)習(xí)

在說(shuō)這個(gè)之前,先說(shuō)一個(gè)小插曲。這個(gè)故事是發(fā)生在我查上述的bug的時(shí)候,business card就是相當(dāng)于qq上把鼠標(biāo)放在好友頭像上,旁邊彈出的一個(gè)對(duì)話框,上面有簡(jiǎn)單的個(gè)人信息。
      既然是個(gè)對(duì)話框,肯定有個(gè)資源與之對(duì)應(yīng),該資源必須應(yīng)該有個(gè)ID,對(duì)話框嘛,一般就是IDD_DIALOG之類的。但是我在該工程里面到處都沒有發(fā)現(xiàn)哪里調(diào)用了domodal()這個(gè)方法。后來(lái)去了基類里面查,才發(fā)現(xiàn)乾坤原來(lái)在這個(gè)里面。基類中有個(gè)idd專門用來(lái)接收子類的IDD,注意這個(gè)必須是IDD,IDC,IDE都不行,因?yàn)樵贒ialogImpl這個(gè)基類中就是這么寫的,人家只認(rèn)這個(gè)。然后有了這個(gè)id之后,該類還有DoModal()方法,其實(shí)是調(diào)用了Create()方法。中間還有其他的函數(shù),但這個(gè)資源總算是與一個(gè)句柄搭上線了。
回到這一章來(lái),我對(duì)它所說(shuō)的創(chuàng)建一個(gè)對(duì)話框要做的這三件事很有感觸,分別是:
1. 創(chuàng)建一個(gè)對(duì)話框資源,就是你要彈出來(lái)讓別人看的東西。
2. 從CDialogImpl類派生一個(gè)新類,處理一些自己想處理的消息,添加一個(gè)空間。
3. 添加一個(gè)共有成員變量IDD,其實(shí)是enum{IDD=IDD_DIALGO};

然后這章就主要在講怎么把一個(gè)類對(duì)象同一個(gè)資源進(jìn)行連接了。
      原來(lái)我就對(duì)怎么連接這兩個(gè)東西比較有興趣,你想啊,一個(gè)是你自己編寫的一個(gè)類,一個(gè)是你畫出來(lái)的資源。比如一個(gè)CMyButton類,一個(gè)按鈕,它們兩個(gè)根本不是一個(gè)東西,CMyButton類中只是有些方法,成員,但是能干什么呢?你看不到摸不著,不跟一個(gè)資源連接起來(lái)你是看不到它是怎么工作的。但是一個(gè)按鈕又是一章圖而已,它沒有什么狀態(tài),也沒有行為,按它也沒有反應(yīng),所以就要把兩者結(jié)合起來(lái),要看得到,還要有反應(yīng)。
      我覺得CMyButton類完全可以跟一個(gè)對(duì)話框連接,沒做過(guò)實(shí)驗(yàn),不知道會(huì)出現(xiàn)什么結(jié)果。
ATL中有三種方法:
1. 先獲得資源,HWND hwnd = GetDlgItem(IDC_BUTTON),好了,這個(gè)叫IDC_BUTTON的東西在內(nèi)存中已經(jīng)存在了,并且通過(guò)這個(gè)hwnd可以找到它了,相當(dāng)于hwnd是它的秘書或者發(fā)言人。那我要把這個(gè)按鈕同一個(gè)對(duì)象連接起來(lái),我肯定是要通過(guò)它秘書跟它建立關(guān)系啦。這里面就有幾個(gè)方法。
   1.1  CButton wndBtn1(hwnd)
   1.2  CButton wndBtn2 = hwnd;
   1.3  CButton wndBtn3;
          wndBtn3.Attach(hwnd)//其實(shí)你去看這個(gè)Attach()方法,就是把hwnd給m_hwnd,跟前面兩種相差不大
2. 包容器窗口
    這個(gè)我只是按教程實(shí)現(xiàn)了,但是我沒有深究,可以子類化一個(gè)控件,可以把傳給父窗口的消息截留,自己先處理,處理完可以選擇不傳給父窗口處理,也可以選擇繼續(xù)讓父窗口處理。
    子類化的問(wèn)題我沒有搞清楚,大概就是這個(gè)控件已經(jīng)有了,現(xiàn)在你自己搞了一個(gè)相應(yīng)的類,你把這個(gè)控件和類聯(lián)系起來(lái)了。這跟沒說(shuō)一樣。
3. 就是子類化了
    就是SubClassWindow()這個(gè)函數(shù),我看我們的程序中用的都是這個(gè),而且也比較簡(jiǎn)單。子類化一個(gè)空間可以把控件上的消息讓控件自己處理,不用全交給父類,那樣老爹就太累了,況且,父類窗口上又多了很多控件,如果都讓父類處理,太不人道了。還是自己的事情自己做。
     所以你就要有個(gè)相應(yīng)的類,并且需要從CWindowImpl繼承,這樣才能做消息循環(huán)嘛,還得在CWindowImpl<>模板參數(shù)中寫上你這個(gè)類的相應(yīng)的控件基類。怎么說(shuō)呢,就是如果你要子類化一個(gè)ListContrl就得這個(gè)搞個(gè)類:
   CMyListImpl:public CWindowImpl<CMyListImpl, CControlView>,類模板的第一個(gè)參數(shù)不用說(shuō)了,第二個(gè)就是相應(yīng)的控件基類了。
      在這個(gè)類里面放上你想處理的消息,就成了。
然后在CMainDlg.h文件中的CMainDlg類中定義一個(gè)對(duì)象,就是你要跟那個(gè)資源連接的東西CMyListImpl wndList;

     還要在Dialog的OnInit函數(shù)里面寫上 wndList.SubClassWindow(GetDlgItem(IDC_LIST));就成了。
我感覺這種方法簡(jiǎn)單直觀。


         再有就是WTL的DDX了,其實(shí)就是WTL定義了幾個(gè)宏,其基本思想還是用SubClassWindow這個(gè)方法
首先,你的CMainDlg得繼承CWinDataChange〈CMainDlg〉 如果你沒這個(gè)的東西,你就用不了這里面的BEGIN_DDX_MAP_EX()宏,等會(huì)我分解一下這個(gè)宏,來(lái)看看里面到底有點(diǎn)啥,其實(shí)就是讓你重載一個(gè)叫DoDataExchange()的方法。
#define BEGIN_DDX_MAP(thisclass)\
    BOOL DoDataExchange(BOOL bSaveAndValidate = FALS,\
                            UINT cltlID = (UINT)-1)\
    {\
         bSaveAndValid;\ //數(shù)據(jù)傳輸方向標(biāo)志,true代表從//控件傳至變量
         nCtrlID;

#define DDX_CONTROL(nID, obj)\
    if(nCtrlID == (UINT)-1 || nCtrlID == nID)\
    DDX_Control(nID, obj, bSaveAndValidate);


template<class T>
class CWinDataExchange
{
    .
    
    template<class TContrl>
    void DDX_Control(UINT nID, TControl& ctrl, BOOL bSave)
    {
       if(!bSave&&ctrl.m_hwnd==NULL)\\必須從CWindImpl繼承才有這個(gè)變量
          {
            T* pT = static_cast<T*>(this);
            ctrl.SubClassWindow(pT->GetDlgItem(nID));
//這個(gè)T在這里就是CMainDlg啦,神奇吧
           }
}

#define END_DDX_MAP()\
        return TRUE;\
       }
  

看了上面的解釋基本能了解DDX其實(shí)跟上面差不多把,就是用宏把他們整合起來(lái)了,障眼法。

額,下面就是控件的反射了,據(jù)說(shuō)MFC都是把傳到父類的消息反射回去,誰(shuí)給我的我反給誰(shuí),挺懶的。
WTL也有幾個(gè)宏來(lái)實(shí)現(xiàn)這個(gè)目的,并且誰(shuí)給我的我都知道,原封不動(dòng)地給你。額,現(xiàn)在用不到,理解不深,就先寫到這里吧。
posted on 2012-03-22 19:54 Dino-Tech 閱讀(421) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品一区二区三区乱码| 91久久精品日日躁夜夜躁国产| 国产色产综合色产在线视频| 国产精品毛片在线| 欧美日韩国产小视频| 欧美精品久久99久久在免费线| 欧美高清你懂得| 欧美日韩mv| 国产视频亚洲| 亚洲国产欧美一区| 亚洲视频狠狠| 欧美影片第一页| 欧美大片在线观看一区二区| 亚洲人精品午夜| 亚洲在线不卡| 欧美成人免费一级人片100| 欧美激情久久久久久| 国产精品大全| 亚洲第一色在线| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲国产一区二区三区高清| 日韩亚洲一区二区| 欧美在线一二三四区| 欧美成人免费全部| 一区二区三区毛片| 老司机精品久久| 国产毛片精品国产一区二区三区| 在线观看一区二区视频| 亚洲在线网站| 亚洲高清av| 欧美影院在线播放| 夜夜嗨av一区二区三区四区| 揄拍成人国产精品视频| 宅男66日本亚洲欧美视频| 久久精品一区| 一本到高清视频免费精品| 久久米奇亚洲| 国产人久久人人人人爽| 亚洲精品综合精品自拍| 久久精品综合一区| 99精品欧美一区二区三区 | 亚洲一区视频| 欧美日韩卡一卡二| 亚洲第一网站| 久久午夜电影网| 午夜精品福利一区二区三区av| 欧美成人精品在线| 亚洲国产导航| 玖玖玖国产精品| 午夜精品久久久久久久久久久久久| 欧美日韩国产经典色站一区二区三区| 黄色成人精品网站| 久久欧美中文字幕| 欧美综合国产精品久久丁香| 国产精品久久毛片a| 中文网丁香综合网| 99精品国产在热久久婷婷| 欧美理论电影网| 亚洲天堂成人在线观看| 99视频有精品| 国产精品久久9| 亚洲欧美在线免费观看| 亚洲私人影院| 国产日韩在线一区| 久久综合网色—综合色88| 久久精品亚洲一区| 雨宫琴音一区二区在线| 欧美激情精品久久久久久久变态| 久久全国免费视频| 91久久久在线| 夜夜躁日日躁狠狠久久88av| 国产精品久久久久秋霞鲁丝| 欧美在线不卡视频| 久久久精品国产免大香伊| 尤物yw午夜国产精品视频| 美女成人午夜| 欧美另类99xxxxx| 亚洲欧美春色| 久久国产精彩视频| 永久免费毛片在线播放不卡| 亚洲国产老妈| 国产精品青草久久久久福利99| 欧美在线二区| 男女视频一区二区| 亚洲综合视频一区| 久久精品免视看| 一区二区欧美亚洲| 亚洲欧洲av一区二区| 亚洲国产精品视频| 一区二区三区不卡视频在线观看 | 午夜精品影院在线观看| 午夜在线电影亚洲一区| 亚洲国产精品一区在线观看不卡| 亚洲巨乳在线| 极品少妇一区二区三区精品视频| 亚洲成人资源| 国产精品人人爽人人做我的可爱| 老牛国产精品一区的观看方式| 欧美日本在线| 美女脱光内衣内裤视频久久影院 | 久久精品av麻豆的观看方式| 免费成人av资源网| 亚洲欧美精品中文字幕在线| 老鸭窝亚洲一区二区三区| 中国成人亚色综合网站| 久久久www成人免费毛片麻豆| 亚洲婷婷国产精品电影人久久| 欧美一区二区网站| 亚洲特色特黄| 欧美精品少妇一区二区三区| 久久综合给合久久狠狠狠97色69| 欧美午夜不卡在线观看免费| 亚洲第一天堂av| 韩国在线一区| 亚洲欧美中文日韩在线| 亚洲午夜影视影院在线观看| 免费观看成人网| 久色婷婷小香蕉久久| 国产精品热久久久久夜色精品三区| 亚洲黄色性网站| 亚洲大片免费看| 久久国内精品自在自线400部| 亚洲欧美大片| 国产精品美女久久| 亚洲午夜一区二区三区| 亚洲在线一区二区| 欧美日韩亚洲一区二区| 日韩午夜中文字幕| 一区二区三区成人| 欧美日韩国产区一| aa亚洲婷婷| 亚洲视频在线观看三级| 欧美精品免费视频| 亚洲精品乱码久久久久久日本蜜臀| 亚洲激情视频在线播放| 免费日韩视频| 亚洲国产精品一区二区第四页av| 亚洲电影观看| 欧美va亚洲va国产综合| 亚洲国产三级在线| 一区二区欧美日韩视频| 欧美视频日韩视频| 国产一区亚洲| 欧美一区二区三区在线| 久久久久久综合网天天| 在线精品视频免费观看| 欧美成人三级在线| 99精品欧美一区二区蜜桃免费| 亚洲一区二区av电影| 国产精品午夜电影| 久久精品亚洲精品| 亚洲区一区二| 欧美一区二区在线免费播放| 牛人盗摄一区二区三区视频| …久久精品99久久香蕉国产| 久久亚洲综合色一区二区三区| 欧美激情在线免费观看| 亚洲伦理久久| 国产精品实拍| 久久久久久色| 日韩亚洲欧美精品| 久久久天天操| 一个人看的www久久| 国产人成一区二区三区影院| 美女任你摸久久| 亚洲视频自拍偷拍| 麻豆国产精品va在线观看不卡| 亚洲免费播放| 国产亚洲精品自拍| 欧美国产高潮xxxx1819| 亚洲一区一卡| 亚洲高清免费在线| 欧美一区午夜视频在线观看| 亚洲福利视频网| 国产精品日韩在线| 欧美激情国产精品| 香港久久久电影| 亚洲欧洲在线播放| 久久欧美中文字幕| 亚洲制服av| 亚洲区欧美区| 国产综合色产| 欧美无砖砖区免费| 麻豆av一区二区三区| 亚洲制服av| 亚洲精品国产日韩| 久久九九精品99国产精品| 一区二区三区高清在线观看| 一色屋精品亚洲香蕉网站| 国产精品国产自产拍高清av王其| 久久免费视频网| 欧美亚洲视频在线观看| 亚洲精品在线二区| 欧美激情亚洲国产| 蜜乳av另类精品一区二区| 欧美在线国产精品| 亚洲一区日韩在线| 在线视频精品一区| 久久九九热免费视频| 午夜久久黄色|