• <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>
            Cpper
            C/C++高級(jí)工程師 Android高級(jí)軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語(yǔ)言 程序猿
            GUI系統(tǒng) 布局管理器
            1.布局管理器存在的理由:可以避免手動(dòng)或者逐個(gè)調(diào)整控件位置
            2.布局管理器的基本功能:調(diào)整同一容器下同一層次下各個(gè)控件的位置
            3.布局管理器的基本接口:
                   A.控件加入
                   B.控件移除
                   C.控件排列
            4.布局管理器和控件的關(guān)系
                   A.一個(gè)布局管理器負(fù)責(zé)1個(gè)或則多個(gè)控件的排列
                   B.具有控件容器語(yǔ)義的控件(例如面板)持有一個(gè)布局管理器
            5.合適調(diào)用布局管理之布局?
                  A.持有的控件尺寸變化,移動(dòng)或者用戶顯示的調(diào)用之時(shí)
            6.可能的布局管理器類型
                  A>流式,中央布局,盒子,復(fù)雜類型,...

            7.簡(jiǎn)單的布局管理器接口
            ///////////////////////////////////////////////////////////
            /// UI布局信息基類
            ///////////////////////////////////////////////////////////
            class UILayoutInfo
            {
            public:
                UILayoutInfo(){}
                
            virtual ~UILayoutInfo(){}
            public:
                
            virtual engine_string GetLayouttType()const = 0;
            };

            ///////////////////////////////////////////////////////////
            /// 定義UI布局管理器基類
            ///////////////////////////////////////////////////////////
            class UILayouter
            {
            public:
                UILayouter(){}
                
            virtual ~UILayouter(){}
            public:
                
            ////////////////////////////////////////////////////////
                
            /// 增加一個(gè)窗體到布局管理區(qū)
                
            ////////////////////////////////////////////////////////
                virtual UILayouter& AddWidget(Widget* widget) = 0;
                
            virtual UILayouter& AddWidget(Widget* widget,const UILayoutInfo&)
                {
                    AddWidget(widget);
                    
            return *this;
                }

                
            ////////////////////////////////////////////////////////
                
            /// 控件移除和重新排列
                
            ////////////////////////////////////////////////////////    
                virtual UILayouter& RemoveWidget(Widget* widget) = 0;
                
            virtual UILayouter& Arrange(Widget* parent) = 0;
            };

            所有類型的布局管理器都需要繼承于UILayouter
            其成員函數(shù)Arrange負(fù)責(zé)調(diào)配parent控件下的所有控件單元.

            需要說(shuō)明的是當(dāng)容器控件加入一個(gè)新的控件的時(shí)候,其布局管理器就會(huì)調(diào)用AddWidget負(fù)責(zé)把新的控件加入布局管理器對(duì)象

            舉一個(gè)UI面板的例子:
            ////////////////////////////////////////////////////////////
            /// UI面板(容器)
            ////////////////////////////////////////////////////////////
            class G_DLL_API Panel : public Widget
            {
            public:
                Panel(
            const Rectf& rect,Widget* parent,const engine_string& text = "Panel");
                
            virtual ~Panel();
            public:
                
            ////////////////////////////////////////////////////////
                
            /// 加入一個(gè)子窗體
                
            ////////////////////////////////////////////////////////
                Panel& AddChildWidget(Widget* widget)
                {
                    windows_.push_back(widget);
                    layouter_
            ->AddWidget(widget);
                    
            return *this;
                }
                Panel
            & AddChildWidget(Widget* widget,const UILayoutInfo& info)
                {
                    windows_.push_back(widget);
                    layouter_
            ->AddWidget(widget,info);
                    
            return *this;
                }

                
            ////////////////////////////////////////////////////////
                
            /// 控件移除
                
            ////////////////////////////////////////////////////////
                Panel& RemoveChildWidget(Widget* widget)
                {
                    windows_.remove(widget);
                    layouter_
            ->RemoveWidget(widget);
                    
            return *this;
                }

                
            ////////////////////////////////////////////////////////
                
            /// 控件排列
                
            ////////////////////////////////////////////////////////
                Panel& ArrangeChildren()
                {
                    layouter_
            ->Arrange(this);
                    
            return *this;
                }

                
            ////////////////////////////////////////////////////////
                
            /// 加載布局管理器
                
            ////////////////////////////////////////////////////////
                Panel& SetLayouter(UILayouter* layouter);
            在我設(shè)計(jì)的時(shí)候主要參考了2個(gè)GUI庫(kù),glooey,opengl gui lib
            目前商業(yè)上使用的開(kāi)源CEGUI過(guò)于復(fù)雜 比很多游戲引擎都大 讓人難以容忍
            posted on 2010-06-02 17:14 ccsdu2009 閱讀(2043) 評(píng)論(4)  編輯 收藏 引用 所屬分類: Game引擎
            Comments
            • # re: 蓋莫游戲引擎-GUI系統(tǒng)-布局管理器
              ccsdu2009
              Posted @ 2010-06-02 17:18
              這個(gè)應(yīng)該使用UML,可惜我很少耶很久沒(méi)有使用咯  回復(fù)  更多評(píng)論   
            • # re: 蓋莫游戲引擎-GUI系統(tǒng)-布局管理器[未登錄](méi)
              cexer
              Posted @ 2010-06-02 23:23
              見(jiàn)過(guò)的最強(qiáng)的的布局管理器是WOW的。布局管理器一般實(shí)現(xiàn)得都靈活性不高,使用起來(lái)的代碼不比手寫(xiě)MoveWindow少多少,能實(shí)現(xiàn)的布局也太有限。寫(xiě)的好的像WOW那種的確實(shí)很強(qiáng)大,不過(guò)實(shí)現(xiàn)起來(lái)太費(fèi)精力了,使用起來(lái)也不如MoveWindow直觀,反正我自己寫(xiě)GUI框架是不寫(xiě)這個(gè)的。  回復(fù)  更多評(píng)論   
            • # re: 蓋莫游戲引擎-GUI系統(tǒng)-布局管理器
              陳梓瀚(vczh)
              Posted @ 2010-06-03 13:26
              @cexer
              我自己實(shí)現(xiàn)了TableLayout, StackLayout, Docklayout, FreeLayout。  回復(fù)  更多評(píng)論   
            • # re: 蓋莫游戲引擎-GUI系統(tǒng)-布局管理器
              陳梓瀚(vczh)
              Posted @ 2010-06-03 13:26
              @cexer
              主要是測(cè)試麻煩  回復(fù)  更多評(píng)論   
             
            国产真实乱对白精彩久久| 久久久久无码精品| 亚洲国产精品婷婷久久| 久久久久国产一级毛片高清板 | 久久福利青草精品资源站| 久久精品草草草| 狠狠色综合网站久久久久久久高清 | 欧美精品福利视频一区二区三区久久久精品 | 中文字幕精品无码久久久久久3D日动漫 | 热综合一本伊人久久精品| 人妻精品久久久久中文字幕69| 久久久无码人妻精品无码| 国内精品免费久久影院| 久久婷婷五月综合97色一本一本 | 久久精品中文字幕有码| 久久精品一本到99热免费| 久久中文字幕视频、最近更新 | 久久婷婷人人澡人人| 国产精品久久国产精品99盘| 午夜精品久久久久久影视riav| 蜜桃麻豆www久久| 麻豆成人久久精品二区三区免费| 久久久精品视频免费观看 | 国产精品久久久久久久久久影院| 99久久www免费人成精品| 久久精品国产亚洲AV电影| 99久久国产精品免费一区二区 | 久久久久AV综合网成人 | 欧美激情精品久久久久久久九九九| 7777久久亚洲中文字幕| 中文字幕乱码久久午夜| 麻豆精品久久久久久久99蜜桃| 激情五月综合综合久久69| 国产毛片久久久久久国产毛片 | 久久久久亚洲AV片无码下载蜜桃 | 一本色道久久综合亚洲精品| 久久亚洲2019中文字幕| 亚洲国产成人久久综合区| 一本大道久久东京热无码AV| 亚洲一级Av无码毛片久久精品| 一本色综合久久|