Bolt界面引擎 HostWnd的生存周期以及相应的objtree的绑定问题
来源:互联网 发布:java实现在线客服功能 编辑:程序博客网 时间:2024/06/06 13:25
一、 hostwnd 对象的create和delete
hostwnd对象可以创建一次,同时指定一个全局唯一的id;也可以delete一次,就是从hostwndmanager里面移除掉,。
创建hostwnd对象代码如下:
// 先获取templateManager
local templateMananger = XLGetObject("Xunlei.UIEngine.TemplateManager")
// 获取要创建的hostwnd的模板
local tm = templateMananger:GetTemplate("bolt.newtaskdlg","HostWndTemplate")
// 创建hostwnd,并指定一个全局唯一的id,如果该id的hostwnd已经存在,则会创// 建失败。
local modalHostWnd = tm:CreateInstance("NewTaskDlg.Dialog")
移除hostwnd对象的代码如下:
local hostwndManager = XLGetObject("Xunlei.UIEngine.HostWndManager")
// conghostwnd移除指定id的hostwnd,并销毁。假如此时的窗口并没有销毁(也就是没有调用hostwnd.Destroy或者hostwnd.EndDialog),那么会先调用相应的销毁函数,销毁窗口,再删除窗口对象。
hostwndManager:RemoveHostWnd("NewTaskDlg.Dialog")
hostwnd创建窗口和销毁窗口的方法如下
对于模态对话框,调用DoModal和EndDialog
对于非模态对话框,调用Create和Destroy
注意:假如hostwnd的窗口已经创建了,在没有销毁窗口之前,不可以再次创建,好比在MFC或者ATL里面,一个wnd不可以连续DoModal两次而不销毁。
一个hostwnd对象在创建之后,从hostwndmanager移除之前,可以多次调用Create或者DoModal来创建窗口并销毁,不一定每次都要从hostwndmanager里面移除对象!这样可以加速窗口创建过程,不用每次都从模板创建一个新的hostwnd的对象,新建面板就是一个典型的例子:
在创建hostwnd对象之前,可以先判断一下指定id的hostwnd对象是否已经存在了:
local hostwndManager = XLGetObject("Xunlei.UIEngine.HostWndManager")
local modalHostWnd = hostwndManager:GetHostWnd("NewTaskDlg.Dialog")
if not modalHostWnd then
local template = templateMananger:GetTemplate("bolt.newtaskdlg","HostWndTemplate")
if template then
modalHostWnd = modalHostWndTemplate:CreateInstance("NewTaskDlg.Dialog")
end
end
需要特别注意的是:窗口在Destroy或者EndDialog销毁了之后,对应的hostwnd对象并没有从hostwndmananger立面移除!所以下次再创建相同id的hostwnd对象会失败,如果的确需要从hostwndmanager里面移除,需要显示调用:
hostwndManager:RemoveHostWnd("NewTaskDlg.Dialog")
二、 objtree对象的创建、销毁以及和hostwnd的绑定和解绑定
objtree对象的创建:
local objtreeManager = XLGetObject("Xunlei.UIEngine.TreeManager")
local template = templateMananger:GetTemplate("ObjectTreeTemplate1","ObjectTreeTemplate")
// 创建指定id的objtree,注意该id是全局唯一的,如果该id已经存在,则会创建失败
local uiObjectTree2 = objectTreeTemplate2:CreateInstance("NewTaskDlg.ObjectTree")
objtree对象的销毁:
调用objtreemanager的DestroyTree来显示销毁,需要注意,objtree所绑定的hostwnd,在hostwnd的UnBindObjTree时候,不会移除(销毁)objtree对象。Hostwnd在Destroy或者EndDialog时候,会调用UnbindObjTree解除绑定。
// 从hostwnd解绑,也可以根据id从objtreeManager里面获取
local objtree = hostwnd:UnbindUIObjectTree()
local objtreeManager = XLGetObject("Xunlei.UIEngine.TreeManager")
//销毁objtree对象。
objtreeManager:DestroyTree(objtree)
需要注意的是,窗口销毁之后,上面绑定的objtree对象不会被销毁,只是会被解除绑定,所以如果真的需要销毁objtree对象,那么需要显示销毁;否则在下次创建相同的id的objtree时候会失败,因为该id的objtree已经存在了。
下面是一个彻底的销毁hostwnd以及上面的objtree对象的一个方法:
local hostwndManager = XLGetObject("Xunlei.UIEngine.HostWndManager")
local hostwnd = hostwndManager:GetHostWnd("NewTaskDlg.Dialog")
// 解除绑定,并显示销毁
local objtree = hostwnd:UnbindUIObjectTree()
local objtreeManager = XLGetObject("Xunlei.UIEngine.TreeManager")
objtreeManager:DestroyTree(objtree)
// 销毁窗口
hostwnd:EndDialog(0)
// 从hostwndmanager里面移除窗口对象并销毁
hostwndManager:RemoveHostWnd("NewTaskDlg.Dialog")
- Bolt界面引擎 HostWnd的生存周期以及相应的objtree的绑定问题
- Bolt界面引擎元对象(UIObject)的动态创建
- BOLT UI界面引擎是如何工作的?(BOLT UI入门教程)
- 页面的生存周期
- 页面的生存周期
- 页面的生存周期
- JavaBean的生存周期
- sevlet的生存周期
- 页面的生存周期
- session的生存周期
- 活动的生存周期
- 软件工程的生存周期
- 活动的生存周期
- Bolt引擎内置的元对象介绍
- T5的页面生存周期
- aspx页面的生存周期
- SESSION变量的生存周期
- android活动的生存周期
- 用Bolt引擎实现换肤指南
- control自定义事件指南
- 关于c#中timer的使用可能要注意的
- RMAN学习8——控制文件恢复(nocatalog模式)
- 什么是RESTful Web Service?
- Bolt界面引擎 HostWnd的生存周期以及相应的objtree的绑定问题
- WorldWind学习系列十二:Measure插件学习
- .exe is not a valid Win32 application
- shared_ptr相关小结
- Please ensure that adb is correctly located at问题解决
- Asterisk NAT 2
- 强力删除各种文件夹
- 为Fckeditor添加自定义工具栏按钮
- hdu 1034 #模拟