1、Toolbar的初始化步骤
[1]、Toolbar.FrameworkInitialize()
在这里建立所有的Tool实例(但是未初始化完其所有属性)。
[2]、Toolbar.OnLoad()
在这里主要是调用了AddToolItems()方法建立Map里边的工具实例。Toolbar的工
具类名是ToolbarItem,而Map里边的工具类名是MapToolItem,两者并不一样。
AddToolItems()具体工作:
(1)、取出Toolbar的所有ToolbarItem(s)
(2)、foreach(循环)
{
1、调用callToolbarItemInitialize()对ToolbarItem进行进一步的初始化,
而callToolbarItemInitialize()内部又调用LoadClassFromAssembly(),其
实就是建立起ToolBarItem的ServerActionClass的实例,这个实例通过一
个Hashtable保存,让ToolbarItem名称和Object配对。
2、以ToolbarItem为原型,建立MapToolItem实例,并添加到Map的内部工
具集中。
MapToolItem有一个属性ServerToolAction,用来保存该Item对应的
ServerActionClass的实例。
}
[3]、ToolbarBase.RenderContents() -> RenderRuntime()
这个步骤主要用来生成工具条及工具按钮的Client HTML代码
RenderRuntime()
{
......
//
// 调用ToolbarItem的Render()方法,让每一个ToolBarItem都产生自己
// 对应的方法
//
foreach (ToolbarItem item in this.ToolbarItems)
{
item.Render(this, num2, num3, false, builder);
}
...
}
Tool.Redner()里边有很多工作,但是最关键的是以下几行代码:
Render()
{
...
if (!inDesignMode && !base.Disabled)
{
builder.Append(string.Format(" onMouseDown=\"ToolbarMouseDown('{0}', '{1}', 'Tool', event);\"\n", toolbar.ClientID, this.Name));
builder.Append(string.Format(" onMouseOver=\"ToolbarMouseOver('{0}','{1}');\"\n", toolbar.ClientID, this.Name));
builder.Append(string.Format(" onMouseOut=\"ToolbarMouseOut( '{0}','{1}');\"\n", toolbar.ClientID, this.Name));
}
...
}
这个代码的意思就是说,如果用户单击了工具条上的按钮,就执行Javascript的
函数ToolbarMouseDown()等。
这个ToolbarMouseDown()出现在ESRI.ADF.UI.Toolbar.js里边。