控件清单
<xlue author='Thunder Corporation' copyright='(C) Thunder Corporation.' name='BoltNameTable' > <nametable class='BaseUI.ScrollBar.ScrollPosAni' id='BaseUI.ScrollBar.ScrollPosAni.Template' path='layout\ScrollBar.xml' type='AnimationTemplate'/> <nametable class='' id='BaseUI.VScrollBar' path='layout\ScrollBar.xml' type='ObjectTemplate'/> <nametable class='SpeedUpjiedian_Suc.bottom' id='SpeedUpjiedian_Suc.bottom' path='layout\SpeedUpResult.xml' type='control'/> <nametable class='' id='Login.Menu' path='layout\MenuPanel_Login.xml' type='ObjectTreeTemplate'/> <nametable class='MenuHostWnd' id='Login.Menu.Wnd' path='layout\MenuPanel_Login.xml' type='HostWndTemplate'/> <nametable class='FrameHostWnd' id='FeedBackError.Wnd' path='layout\FeedBackWndError.xml' type='HostWndTemplate'/> <nametable class='ObjectTreeTemplate' id='FeedBackError.Manager' path='layout\FeedBackWndError.xml' type='ObjectTreeTemplate'/> <nametable class='System.button' id='System.button' path='layout\SystemButton.xml' type='control'/> <nametable class='Close.button' id='Close.button' path='layout\CloseButton.xml' type='control'/> <nametable class='System.RichEdit' id='System.RichEdit' path='layout\RichEdit.xml' type='control'/> <nametable class='Thunder.System.ButtonEx.Ctrl' id='Thunder.System.ButtonEx.Ctrl' path='layout\SystemButtonEx.xml' type='control'/> <nametable class='Thunder.System.ItemEx' id='Thunder.System.ItemEx' path='layout\SystemButtonEx.xml' type='control'/> <nametable class='Game.button' id='Game.button' path='layout\GameButton.xml' type='control'/> <nametable class='Vip.button' id='Vip.button' path='layout\VipButton.xml' type='control'/> <nametable class='Help.button' id='Help.button' path='layout\HelpButton.xml' type='control'/> <nametable class='Tool.button' id='Tool.button' path='layout\ToolButton.xml' type='control'/> <nametable class='Menu.FeedBack' id='Menu.FeedBack' path='layout\FeedBack.xml' type='control'/> <nametable class='System.Menu' id='System.Menu' path='layout\Menu.xml' type='control'/> <nametable class='System.Skin' id='System.Skin' path='layout\Skin.xml' type='control'/> </xlue>
目录清单(部分)
素材
界面程序主窗口文件(MainWnd.xml,MainWnd.lua)
XML
<xlue> <objtreetemplate id="XL.MainObjTree" class="ObjectTreeTemplate"> <attr> <left>-200</left> <top>-200</top> <width>2000</width> <height>2000</height> </attr> <obj id="app.bkg" class="LayoutObject"> <attr> <left>0</left> <top>0</top> <width>father.width</width> <height>father.height</height> </attr> <children> <obj id="bkg" class="ImageObject"> <attr> <left>0</left> <top>0</top> <width>father.width</width> <height>father.height</height> <image>bkg</image> </attr> <children> <obj id="caption" class="CaptionObject"> <attr> <width>father.width</width> <height>father.height</height> <zorder>-1000</zorder> </attr> </obj> <obj id="mainwnd.body" class="LayoutObject"> <attr> <left>8</left> <top>8</top> <width>father.width-16</width> <height>father.height-16</height> </attr> <children> <obj id="logo" class="ImageObject"> <attr> <left>540</left> <top>20</top> <width>197</width> <height>37</height> <image>logo</image> </attr> </obj> <obj id="menu.feedback" class="Menu.FeedBack"> <attr> <left>father.width - 144</left> <top>-8</top> <width>28</width> <height>31</height> </attr> <eventlist> <event name="OnClick" file="MainWnd.lua" func="CreatFeedBackManager" /> </eventlist> </obj> <obj id="system.menu" class="System.Menu"> <attr> <left>father.width - 88</left> <top>-8</top> <width>28</width> <height>31</height> </attr> <eventlist> <event name="OnClick" file="MainWnd.lua" func="CreatMenuManager" /> </eventlist> </obj> <obj id="system.skin" class="System.Skin"> <attr> <left>father.width - 116</left> <top>-8</top> <width>28</width> <height>31</height> </attr> </obj> <obj id="Button.Layout" class="LayoutObject"> <attr> </attr> <children> <obj id="game.button" class="Game.button"> <attr> <left>0</left> <top>0</top> <width>70</width> <height>80</height> </attr> <eventlist> <event name="OnClick" file="MainWnd.lua" func="OnActiveTabChanged" /> </eventlist> </obj> <obj id="vip.button" class="Vip.button"> <attr> <left>90</left> <top>0</top> <width>70</width> <height>80</height> </attr> <eventlist> <event name="OnClick" file="MainWnd.lua" func="OnActiveTabChanged" /> </eventlist> </obj> <obj id="help.button" class="Help.button"> <attr> <left>180</left> <top>0</top> <width>70</width> <height>80</height> </attr> <eventlist> <event name="OnClick" file="MainWnd.lua" func="OnActiveTabChanged" /> </eventlist> </obj> <obj id="tool.button" class="Tool.button"> <attr> <left>270</left> <top>0</top> <width>70</width> <height>80</height> </attr> <eventlist> <event name="OnClick" file="MainWnd.lua" func="OnActiveTabChanged" /> </eventlist> </obj> </children> </obj> <obj id="MainPanel" class="Demo.MainPanel"> <attr> <left>-15</left> <top>-98</top> <width>father.width+30</width> <height>father.height+25</height> </attr> </obj> <obj id="vip.MainPanel" class="Vip.MainPanel"> <attr> <left>-15</left> <top>-98</top> <width>father.width+30</width> <height>father.height+25</height> </attr> </obj> <obj id="help.MainPanel" class="Help.MainPanel"> <attr> <left>-15</left> <top>-98</top> <width>father.width+30</width> <height>father.height+25</height> </attr> </obj> <obj id="tool.MainPanel" class="Tool.MainPanel"> <attr> <left>-15</left> <top>-98</top> <width>father.width+30</width> <height>father.height+25</height> </attr> </obj> <obj id="mainwnd.sysbtn" class="Thunder.System.ButtonEx.Ctrl" > <attr> <left>father.width - 60</left> <top>-8</top> <width>90</width> <height>20</height> <zorder>330</zorder> <ItemWidthIsSame>false</ItemWidthIsSame> </attr> <eventlist> <event name="OnClose" file="MainWnd.lua" func="OnClose" /> <event name="OnInitControl" file="MainWnd.lua" func="OnSysBtnInitControl" /> <event name="OnMinisize" file="MainWnd.lua" func="OnMinisize" /> </eventlist> </obj> </children> </obj> </children> </obj> </children> <eventlist> <!--定义事件响应时,如果方法被定义在同名的.xml.lua中同时方法名为事件名时,可以省略file 及 func属性,会损失加载效率, 不推荐--> <event name="OnInitControl" file="MainWnd.lua" func="OnInitControl" /> </eventlist> </obj> </objtreetemplate> <hostwndtemplate id="XL.MainWnd" class="FrameHostWnd" > <attr> <mainwnd>1</mainwnd> <title>Bolt</title> <layered>1</layered> <left>200</left> <top>100</top> <!--注意这是容器窗口的大小,设置的要合理--> <width>760</width> <height>500</height> <cacheleft>0</cacheleft> <cachetop>0</cachetop> <cachewidth>1000</cachewidth> <cacheheight>720</cacheheight> <center>1</center> <visible>1</visible> <enable>1</enable> <active>1</active> <maxbox>0</maxbox> <minbox>0</minbox> <minwidth>100</minwidth> <minheight>72</minheight> <maxwidth>1000</maxwidth> <maxheight>720</maxheight> <appwindow>1</appwindow> <topmost>1</topmost> <fps>30</fps> </attr> <eventlist> <event name="OnSize" file="MainWnd.lua" func="OnSize"/> </eventlist> </hostwndtemplate> </xlue>
LUA
function OnSize(self, sizetype, width, height) local objectTree = self:GetBindUIObjectTree() local rootObject = objectTree:GetRootObject() rootObject:SetObjPos(0, 0, width, height) end function OnClose(self) local hostwndManager = XLGetObject("Xunlei.UIEngine.HostWndManager") local hostwnd = hostwndManager:GetHostWnd("Wizard.MainWnd.Instance") hostwndManager:RemoveHostWnd("Wizard.MainWnd.Instance") local objtreeManager = XLGetObject("Xunlei.UIEngine.TreeManager") objtreeManager:DestroyTree("Wizard.MainObjTree.Instance") local myClassFactory = XLGetObject("HelloBolt.MyClass.Factory") local myClass = myClassFactory:CreateInstance() myClass:DeletIcon() os.exit(0) --local app = XLGetObject("Wizard.App") --app:Quit(0) end function OnSysBtnInitControl(self) local hostwndManager = XLGetObject("Xunlei.UIEngine.HostWndManager") local hostwnd = hostwndManager:GetHostWnd("XL.MainWnd.Instance") local state = hostwnd:GetWindowState() end function OnMinisize(self) local hostwndManager = XLGetObject("Xunlei.UIEngine.HostWndManager") local hostwnd = hostwndManager:GetHostWnd("XL.MainWnd.Instance") hostwnd:Min() --hostwnd:SetVisible(false) end function GetScreenPos(menuRoot, x, y) local left,top,right,bottom = menuRoot:GetObjPos() local width = right - left local height = bottom - top local menuTree = menuRoot:GetOwner() local menuHostWnd = menuTree:GetBindHostWnd() local sleft, stop, sright, sbottom = menuHostWnd:GetMonitorRect(x, y) if x + width > sright then x = x - width end if y + height > sbottom then y = y - height end return x, y, width, height end function OnMainWndRButtonUp(self, x, y) local templateMananger = XLGetObject("Xunlei.UIEngine.TemplateManager") local menuTreeTemplate = templateMananger:GetTemplate("Wizard.Menu","ObjectTreeTemplate") local menuTree = menuTreeTemplate:CreateInstance("Wizard.Menu.Instance") local hostwndManager = XLGetObject("Xunlei.UIEngine.HostWndManager") local parent = hostwndManager:GetHostWnd("Wizard.MainWnd.Instance") local parentHandle = parent:GetWndHandle() local menuHostWndTemplate = templateMananger:GetTemplate("Wizard.Menu", "HostWndTemplate") local menuHostWnd = menuHostWndTemplate:CreateInstance("Wizard.Menu.Instance") menuHostWnd:BindUIObjectTree(menuTree) local menuContext = menuTree:GetUIObject("menu.root") x, y = parent:ClientPtToScreenPt(x,y) local left, top, width, height = GetScreenPos(menuContext, x, y) menuHostWnd:TrackPopupMenu(parentHandle, left, top, width, height) local objtreeManager = XLGetObject("Xunlei.UIEngine.TreeManager") objtreeManager:DestroyTree("Wizard.Menu.Instance") hostwndManager:RemoveHostWnd("Wizard.Menu.Instance") end function OnActiveTabChanged(self) --XLMessageBox("sadfasf") --XLMessageBox(self:GetClass()) local ownerTree = self:GetOwner() local buttonLayout=ownerTree:GetUIObject("Button.Layout") local mainPanel = ownerTree:GetUIObject("MainPanel") local vipPanel = ownerTree:GetUIObject("vip.MainPanel") local helpPanel = ownerTree:GetUIObject("help.MainPanel") local toolPanel = ownerTree:GetUIObject("tool.MainPanel") mainPanel:SetVisible(false) mainPanel:SetChildrenVisible(false) vipPanel:SetVisible(false) vipPanel:SetChildrenVisible(false) helpPanel:SetVisible(false) helpPanel:SetChildrenVisible(false) toolPanel:SetVisible(false) toolPanel:SetChildrenVisible(false) local vButton=ownerTree:GetUIObject("vip.button") local hButton=ownerTree:GetUIObject("help.button") local tButton=ownerTree:GetUIObject("tool.button") local gButton=ownerTree:GetUIObject("game.button") if self:GetClass() =="Game.button" then mainPanel:SetVisible(true) mainPanel:SetChildrenVisible(true) vButton:SetState(0) hButton:SetState(0) tButton:SetState(0) vButton:SetOldState(0) hButton:SetOldState(0) tButton:SetOldState(0) elseif self:GetClass() == "Vip.button" then vipPanel:SetVisible(true) vipPanel:SetChildrenVisible(true) gButton:SetState(0) hButton:SetState(0) tButton:SetState(0) gButton:SetOldState(0) hButton:SetOldState(0) tButton:SetOldState(0) elseif self:GetClass() == "Help.button" then helpPanel:SetVisible(true) helpPanel:SetChildrenVisible(true) vButton:SetState(0) gButton:SetState(0) tButton:SetState(0) vButton:SetOldState(0) gButton:SetOldState(0) tButton:SetOldState(0) elseif self:GetClass() == "Tool.button" then toolPanel:SetVisible(true) toolPanel:SetChildrenVisible(true) vButton:SetState(0) hButton:SetState(0) gButton:SetState(0) vButton:SetOldState(0) hButton:SetOldState(0) gButton:SetOldState(0) end end function OnInitControl(self) end function CreatFeedBackManager(self) --实例化skin对象树 local templateMananger = XLGetObject("Xunlei.UIEngine.TemplateManager") local feedbackTreeTemplate = templateMananger:GetTemplate("FeedBack.Manager","ObjectTreeTemplate") local feedbackTree = feedbackTreeTemplate:CreateInstance("FeedBack.Manager.Instance") local hostwndManager = XLGetObject("Xunlei.UIEngine.HostWndManager") local parent = hostwndManager:GetHostWnd("XL.MainWnd.Instance") local parentHandle = parent:GetWndHandle() --实例化skin窗口 local feedbackHostWndTemplate = templateMananger:GetTemplate("FeedBack.Wnd", "HostWndTemplate") local feedbackHostWnd = feedbackHostWndTemplate:CreateInstance("FeedBack.Wnd.Instance") --将skin对象树装在入窗口实例 feedbackHostWnd:BindUIObjectTree(feedbackTree) feedbackHostWnd:Create() end --menuHostWnd=nil isVisible=true function CreatMenuManager(self) --实例化对象树 local templateMananger = XLGetObject("Xunlei.UIEngine.TemplateManager") local menuTreeTemplate = templateMananger:GetTemplate("XL.Menu","ObjectTreeTemplate") local menuTree = menuTreeTemplate:CreateInstance("XL.Menu.Instance") local hostwndManager = XLGetObject("Xunlei.UIEngine.HostWndManager") local parent = hostwndManager:GetHostWnd("XL.MainWnd.Instance") local parentHandle = parent:GetWndHandle() --实例化skin窗口 local menuHostWndTemplate = templateMananger:GetTemplate("XL.Menu.Wnd", "HostWndTemplate") local menuHostWnd = menuHostWndTemplate:CreateInstance("XL.Menu.Wnd.Instance") --将skin对象树装在入窗口实例 menuHostWnd:BindUIObjectTree(menuTree) local menuContext = menuTree:GetUIObject("menu.root") x, y = parent:ClientPtToScreenPt(x,y) local left,top,right,bottom = menuContext:GetObjPos() --local left, top, width, height = GetScreenPos(menuContext, x, y) --XLMessageBox(x.." "..y.." "..right.." "..bottom) menuHostWnd:TrackPopupMenu(parentHandle, x+670, y+40, right, bottom) --menuHostWnd:TrackPopupMenu(parentHandle, left, top, width, height) local objtreeManager = XLGetObject("Xunlei.UIEngine.TreeManager") objtreeManager:DestroyTree("XL.Menu.Instance") hostwndManager:RemoveHostWnd("XL.Menu.Wnd.Instance") x=0 y=0 end