轉自Love Lyre原文 ArcEngine的ToolbarControl解析
ToolbarControlClass有三個主要的接口:
IToolbarControl, IToolbarControl2, IToolbarControlDefault
其中,IToolbarControl2是IToolbarControl的新版本.而IToolbarControlDefault is a 'pure' dispatch interface,始終是IToolbarControl的最新的版本,也就是如果有 了IToolbarControl3,那么IToolbarControlDefault就是IToolbarControl3.
在IToolbarControlDefault中有三個Members可以向ToolbarControl添加項:
AddItem():向ToolbarControl添加一個item,支持實現了 ICommand, IMenuDef, IToolbarMenu, ITool, IToolControl, IPaletteDef and IToolbarPalette的類.
AddMenuItem():向ToolbarControl添加一個menu item,是AddItem的一個簡略(剪切)版,支持實現了 IMenuDef,IToolbarMenu的類
AddToolbarDef():向 ToolbarControl添加定制的工具item.
下面以AddItem 為例:
第一個參數是object類型,基本可以是這:UID,ProgID,接口(ICommand,IToolBarDef ...),例如
//Adding a command by UID
UID uID = new UIDClass();
uID.Value = "esriControls.ControlsMapFullExtentCommand";
axToolbarControl1.AddItem(uID,-1,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);
//Adding a command by ProgID
string progID = "esriControls.ControlsMapFullExtentCommand";
axToolbarControl1.AddItem(progID,-1,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);
//Adding a command by ICommand
ICommand command = new ControlsMapFullExtentCommandClass();
axToolbarControl1.AddItem(command,-1,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);
ToolbarControl內部有一個CommandPool,用來存放管理Command.當向ToolbarControl中添加一項的時候,AddItem檢查CommandPool中是否已經存在該Command.如果沒有,這個Command被created,並被加入CommandPool,這個Command的使用計數被置為1.如果這個Command已經存在,它將被重用,使用計數加1.
注意ESRI.ArcGIS.Controls內置的Controls. 像ControlsMapZoomInFixedCommandClass這種以CommandClass結尾的一般是實現了ICommand接口. 這個Command會持久地與MapControl交互就需要ITool接口,像ControlsMapZoomInToolClass這種以ToolClass結尾的都是實現了ITool的類.ControlsFeatureSelectionToolbarClass這種實現了IToolBarDef接口的. 實現了不同接口的類在使用時也有所不同:
ICommand command = new ControlsOpenDocCommandClass();
command.OnCreate(m_mapControl.Object);
command.OnClick();
ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsMapZoomInToolClass();
pCommand.OnCreate(axMapControl1.Object);
axMapControl1.CurrentTool = pCommand as ITool;
ArcEngine中你可以選擇如何使用工具條:
1.使用ArcEngine的ToolbarControl,利用Add函數添加現有的Command Controls.
2.使用ArcEngine的ToolbarControl,利用Add函數添加自己實現的Command Controls.當然繼承自ICommand或者ITool(或者BaseCommand或 BaseTool抽象類)
3.實現IToolBarDef 接口創建定制的工具條(Tool Bar)
4.在按鈕,菜單項或者一般的toolbar中使用ControlsXXXXXXClass
<以上為純屬個人理解,如有錯誤,請留言,謝謝>