• <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>

            一步一步實(shí)現(xiàn)自己的模擬控件(8)——重構(gòu)

             

            模擬控件已經(jīng)出了雛形,是應(yīng)該重構(gòu)一下了。

            新概念:

            其實(shí)說(shuō)是新概念也不盡然,只是在這幾步的實(shí)現(xiàn)中可以發(fā)現(xiàn),這個(gè)模擬控件框架中有兩個(gè)大的概念:容器和控件。我們一直一來(lái)都說(shuō)的是容器窗口,但是其實(shí)這是個(gè)可以上升的概念。容器容納一個(gè)控件體系,也就是關(guān)聯(lián)一個(gè)根控件,那么它就有點(diǎn)類(lèi)似于我們的根控件了。但是容器由必須實(shí)現(xiàn)和具體窗口和控件的交互,所以我們不能簡(jiǎn)單的將根控件作為容器。并且對(duì)于某些特殊的實(shí)現(xiàn),我們還可能需要對(duì)容器的某些功能加以擴(kuò)展,所以我們這次重構(gòu)為容器抽象了一個(gè)基類(lèi),并實(shí)現(xiàn)了一個(gè)窗口容器。

            class Container : public Monopolistic{
            using Monopolistic::pWidget_;
            using Monopolistic::GetWidget;

            public:
            Container();
            virtual ~Container();

            public:
            Widget
            * GetRootWidget() const{return GetWidget();}

            public:
            virtual bool IsValid() const = 0;

            public:
            virtual void Invalidate(const RECT& rect){} // 無(wú)效化容器矩形區(qū)域
            virtual void Invalidate(HRGN hRgn){} // 無(wú)效化容器不規(guī)則區(qū)域
            virtual void Invalidate(){} // 無(wú)效化整個(gè)容器區(qū)域
            };

             

            解耦:

            到目前為止,我們的容器驅(qū)動(dòng)和控件之間具有十分緊密的耦合關(guān)系(生命周期耦合),這次重構(gòu)打算將此解耦,使得我們的容器創(chuàng)建和控件體系創(chuàng)建互不相關(guān),僅僅通過(guò)一次操作來(lái)使得他們關(guān)聯(lián)或者解除關(guān)聯(lián)。

            // 建立窗口容器
            ghost::widget::WindowContainer container;
            container.AttachWindow(hWnd);

            // 建立根控件
            auto pRootWidget = ghost::Widget::Create();

            // 關(guān)聯(lián)容器
            pRootWidget->CreateRelationship(&container);

             

            減少類(lèi):

            這次還有一個(gè)大的變化就是將原先的一些概念融合成了新的概念:驅(qū)動(dòng)、消息過(guò)濾、消息映射都融合到了容器當(dāng)中,因?yàn)檫@三個(gè)概念和具體容器關(guān)系緊密,所以將他們進(jìn)行融合以減少我們的類(lèi)數(shù)目。

            收獲:

            這次重構(gòu)建立了容器這個(gè)概念我們是有一定收獲的:原先我們無(wú)法訪(fǎng)問(wèn)控件所關(guān)聯(lián)的容器,現(xiàn)在可以了。原先控件的容器實(shí)現(xiàn)不易擴(kuò)展,現(xiàn)在可以通過(guò)繼承來(lái)擴(kuò)展(例如layered窗口),甚至可以為容器實(shí)現(xiàn)特有的繪制機(jī)制(例如使用opengl,以后我們抽象了繪制概念便可以看到,目前還只能使用GDI)。

            這次沒(méi)有什么新的內(nèi)容添加,但重構(gòu)還是有必要的,周期性重構(gòu)利于我們對(duì)整個(gè)框架的管理,在重構(gòu)過(guò)程中較容易發(fā)現(xiàn)和修改BUG。

            下載測(cè)試工程源碼

            作者: Evil.Ghost 發(fā)表于 2011-04-19 20:06 原文鏈接

            評(píng)論: 0 查看評(píng)論 發(fā)表評(píng)論


            最新新聞:
            · 滿(mǎn)座網(wǎng)炮轟分眾哄抬廣告價(jià):江南春承諾將調(diào)查(2011-04-20 18:08)
            · 周鴻祎:技術(shù)顛覆+商業(yè)顛覆讓360顛覆了行業(yè)(2011-04-20 18:03)
            · XJP:網(wǎng)購(gòu)冷靜期恐成一紙空文(2011-04-20 18:00)
            · 任正非:一法 兩制 三宣教(2011-04-20 17:24)
            · 微軟:Chrome和Opera存在HTML5執(zhí)行漏洞(2011-04-20 17:20)

            編輯推薦:再談“我是怎么招聘程序員的”

            網(wǎng)站導(dǎo)航:博客園首頁(yè)  我的園子  新聞  閃存  小組  博問(wèn)  知識(shí)庫(kù)

            posted on 2011-04-19 20:06 EvilGhost 閱讀(1629) 評(píng)論(0)  編輯 收藏 引用


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


            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆檔案(12)

            文章檔案(1)

            最新隨筆

            搜索

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            国产成人精品久久免费动漫 | 97久久超碰国产精品旧版| 久久久久国产精品人妻| 久久久久亚洲精品无码蜜桃| 99re这里只有精品热久久| 99久久无码一区人妻| 亚洲国产小视频精品久久久三级 | 久久亚洲私人国产精品| 91视频国产91久久久| 久久综合日本熟妇| 久久久久亚洲精品天堂| 亚洲国产一成久久精品国产成人综合| 青青草原精品99久久精品66| 热综合一本伊人久久精品| 国内精品人妻无码久久久影院| 久久中文字幕无码专区| 久久99国产精品久久99| 麻豆亚洲AV永久无码精品久久 | 精品综合久久久久久97| 免费观看成人久久网免费观看| 久久精品青青草原伊人| 久久天天躁狠狠躁夜夜2020| 精品久久久久久国产| 午夜不卡久久精品无码免费| 久久精品国产男包| 亚洲欧美另类日本久久国产真实乱对白| 久久96国产精品久久久| 久久久久久夜精品精品免费啦| 久久99九九国产免费看小说| 亚洲婷婷国产精品电影人久久| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久狠狠色狠狠色综合| 精品久久久无码人妻中文字幕豆芽| 久久精品亚洲AV久久久无码| 日本WV一本一道久久香蕉| 合区精品久久久中文字幕一区| 国产精品青草久久久久福利99| 久久青青草原综合伊人| 国产精品女同久久久久电影院| 丁香五月网久久综合| 91亚洲国产成人久久精品网址|