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

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

             

            模擬控件已經出了雛形,是應該重構一下了。

            新概念:

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

            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){} // 無效化容器矩形區(qū)域
            virtual void Invalidate(HRGN hRgn){} // 無效化容器不規(guī)則區(qū)域
            virtual void Invalidate(){} // 無效化整個容器區(qū)域
            };

             

            解耦:

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

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

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

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

             

            減少類:

            這次還有一個大的變化就是將原先的一些概念融合成了新的概念:驅動、消息過濾、消息映射都融合到了容器當中,因為這三個概念和具體容器關系緊密,所以將他們進行融合以減少我們的類數(shù)目。

            收獲:

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

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

            下載測試工程源碼

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

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


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

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

            網站導航:博客園首頁  我的園子  新聞  閃存  小組  博問  知識庫

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

            導航

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆檔案(12)

            文章檔案(1)

            最新隨筆

            搜索

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            国产成人精品久久亚洲| 亚洲精品乱码久久久久久久久久久久| 亚洲午夜无码久久久久小说| 久久人人超碰精品CAOPOREN| 少妇被又大又粗又爽毛片久久黑人 | 996久久国产精品线观看| 国产激情久久久久影院小草| 亚洲精品无码久久毛片| 久久99精品久久久久久久久久| 久久免费国产精品一区二区| 日本精品久久久久影院日本| 国内精品九九久久精品| 久久国产精品久久久| 欧美久久综合九色综合| 亚洲AV无码久久| 亚洲乱码日产精品a级毛片久久| 久久香蕉国产线看观看精品yw| 久久久久国产一区二区三区| 亚洲国产精品无码久久久不卡| 久久亚洲高清观看| 一本色道久久综合狠狠躁| 91精品国产色综合久久| 久久99热这里只频精品6| 国内精品久久国产大陆| 囯产极品美女高潮无套久久久| 99久久精品国产一区二区三区| 精产国品久久一二三产区区别 | 热re99久久6国产精品免费| 久久亚洲国产中v天仙www| 人妻无码久久一区二区三区免费| 亚洲欧美国产精品专区久久| 久久久久久国产精品无码下载| 99久久综合狠狠综合久久止| 看久久久久久a级毛片| 久久亚洲精品成人无码网站 | 欧美国产成人久久精品| 国产综合免费精品久久久| 国产精品成人久久久久三级午夜电影| 久久精品亚洲精品国产色婷 | 亚洲欧美久久久久9999| 色婷婷噜噜久久国产精品12p|