public static ToolStripItem CreateItem(this IMenuDef def, ResourceManager resourcemanager, Func <object> commandParameterCallback = null) { ToolStripItem elem = null; if (def.MenuType == MenuType.Seperator) { elem = new ToolStripSeparator(); } else { elem = new ToolStripMenuItem(); elem.Text = def.Text; if (!string.IsNullOrEmpty(def.Image)) { elem.Image = (Image)resourcemanager.GetObject(def.Image); } if (def.ShortCutKeys > 0) { ((ToolStripMenuItem)elem).ShortcutKeys = (Keys)def.ShortCutKeys; } if (def.Command != null) { if (commandParameterCallback == null) { commandParameterCallback = () => null; } MenuItemCommandBinding binding = new MenuItemCommandBinding(elem as ToolStripMenuItem, def.Command, commandParameterCallback); } } elem.Name = def.Name; elem.Size = new System.Drawing.Size(def.SizeH, def.SizeV); return(elem); }
/// <summary> /// 获取和解析插件集合中的所有对象将其分别装入ICommand,IToll,IToolBar和IMenuDef四个集合中 /// </summary> internal void getPluginArray(PluginContainer pCtner) { foreach (IPlugin ipi in pCtner) { ICommand icmd = ipi as ICommand; if (icmd != null) { this._ICmdContainer.Add(icmd.ToString(), icmd); if (icmd.Category != null && !this._CmdCategory.Contains(icmd.Category)) { this._CmdCategory.Add(icmd.Category); } continue; } ITool itool = ipi as ITool; if (itool != null) { this._IToolContainer.Add(itool.ToString(), itool); if (itool.Category != null && !this._CmdCategory.Contains(itool.Category)) { this._CmdCategory.Add(itool.Category); } continue; } IToolBarDef itbd = ipi as IToolBarDef; if (itbd != null) { this._IToolBarDefContainer.Add(itbd.ToString(), itbd); continue; } IDockableWndDef idwd = ipi as IDockableWndDef; if (idwd != null) { this._IDockableWndContainer.Add(idwd.ToString(), idwd); continue; } IMenuDef imd = ipi as IMenuDef; if (imd != null) { this._IMenuDefContainer.Add(imd.ToString(), imd); continue; } } //throw new System.NotImplementedException(); }
private void frmMain_Load(object sender, System.EventArgs e) { // Add commands to the NALayer context menu m_menuLayer = new ToolbarMenuClass(); int nItem = -1; m_menuLayer.AddItem(new cmdLoadLocations(), -1, ++nItem, false, esriCommandStyles.esriCommandStyleTextOnly); m_menuLayer.AddItem(new cmdRemoveLayer(), -1, ++nItem, false, esriCommandStyles.esriCommandStyleTextOnly); m_menuLayer.AddItem(new cmdClearAnalysisLayer(), -1, ++nItem, true, esriCommandStyles.esriCommandStyleTextOnly); m_menuLayer.AddItem(new cmdNALayerProperties(), -1, ++nItem, true, esriCommandStyles.esriCommandStyleTextOnly); // Since this ToolbarMenu is a standalone popup menu use the SetHook method to // specify the object that will be sent as a "hook" to the menu commands in their OnCreate methods. m_menuLayer.SetHook(axMapControl1); // Add command for ArcGIS Network Analyst extension env properties to end of "Network Analyst" dropdown menu nItem = -1; for (int i = 0; i < axToolbarControl1.Count; ++i) { IToolbarItem item = axToolbarControl1.GetItem(i); IToolbarMenu mnu = item.Menu; if (mnu == null) { continue; } IMenuDef mnudef = mnu.GetMenuDef(); string name = mnudef.Name; // Find the ArcGIS Network Analyst extension solver menu drop down and note the index if (name == "ControlToolsNetworkAnalyst_SolverMenu") { nItem = i; //break; } } if (nItem >= 0) { // Using the index found above, get the solver menu drop down and add the Properties command to the end of it. IToolbarItem item = axToolbarControl1.GetItem(nItem); IToolbarMenu mnu = item.Menu; if (mnu != null) { mnu.AddItem(new cmdNAProperties(), -1, mnu.Count, true, esriCommandStyles.esriCommandStyleTextOnly); } // Since this ToolbarMenu is an item on the ToolbarControl the Hook is shared and initialized by the ToolbarControl. // Therefore, SetHook is not called here, like it is for the menu above. } // Initialize naEnv variables m_naEnv = CommonFunctions.GetTheEngineNetworkAnalystEnvironment(); if (m_naEnv == null) { MessageBox.Show("Error: EngineNetworkAnalystEnvironment is not properly configured"); return; } m_naEnv.ZoomToResultAfterSolve = false; m_naEnv.ShowAnalysisMessagesAfterSolve = (int)(esriEngineNAMessageType.esriEngineNAMessageTypeInformative | esriEngineNAMessageType.esriEngineNAMessageTypeWarning); // Set up the buddy control and initialize the NA extension, so we can get to NAWindow to listen to window events. // This is necessary, as the various controls are not yet set up. They need to be in order to get the NAWindow's events. axToolbarControl1.SetBuddyControl(axMapControl1); IExtension ext = m_naEnv as IExtension; object obj = axToolbarControl1.Object; ext.Startup(ref obj); // m_naWindow is set after Startup of the Network Analyst extension m_naWindow = m_naEnv.NAWindow; if (m_naWindow == null) { MessageBox.Show("Error: Unexpected null NAWindow"); return; } m_onContextMenu = new IEngineNAWindowEventsEx_OnContextMenuEventHandler(OnContextMenu); ((IEngineNAWindowEventsEx_Event)m_naWindow).OnContextMenu += m_onContextMenu; m_OnNetworkLayersChanged = new IEngineNetworkAnalystEnvironmentEvents_OnNetworkLayersChangedEventHandler(OnNetworkLayersChanged); ((IEngineNetworkAnalystEnvironmentEvents_Event)m_naEnv).OnNetworkLayersChanged += m_OnNetworkLayersChanged; m_OnCurrentNetworkLayerChanged = new IEngineNetworkAnalystEnvironmentEvents_OnCurrentNetworkLayerChangedEventHandler(OnCurrentNetworkLayerChanged); ((IEngineNetworkAnalystEnvironmentEvents_Event)m_naEnv).OnCurrentNetworkLayerChanged += m_OnCurrentNetworkLayerChanged; }
private void frmMain_Load(object sender, System.EventArgs e) { // Add commands to the NALayer context menu // 向Nalayer上下文菜单添加命令 m_menuLayer = new ToolbarMenuClass(); int nItem = -1; m_menuLayer.AddItem(new cmdLoadLocations(), -1, ++nItem, false, esriCommandStyles.esriCommandStyleTextOnly); m_menuLayer.AddItem(new cmdRemoveLayer(), -1, ++nItem, false, esriCommandStyles.esriCommandStyleTextOnly); m_menuLayer.AddItem(new cmdClearAnalysisLayer(), -1, ++nItem, true, esriCommandStyles.esriCommandStyleTextOnly); m_menuLayer.AddItem(new cmdNALayerProperties(), -1, ++nItem, true, esriCommandStyles.esriCommandStyleTextOnly); m_menuLayer.SetHook(axMapControl1); // Add command for Network Analyst env properties to end of "Network Analyst" dropdown menu // 将网络分析env属性的命令添加到“网络分析师”下拉菜单的末尾 nItem = -1; for (int i = 0; i < axToolbarControl1.Count; ++i) { IToolbarItem item = axToolbarControl1.GetItem(i); IToolbarMenu mnu = item.Menu; if (mnu == null) { continue; } IMenuDef mnudef = mnu.GetMenuDef(); string name = mnudef.Name; if (name == "ControlToolsNetworkAnalyst_SolverMenu") { nItem = i; break; } } if (nItem >= 0) { IToolbarItem item = axToolbarControl1.GetItem(nItem); IToolbarMenu mnu = item.Menu; if (mnu != null) { mnu.AddItem(new cmdNAProperties(), -1, mnu.Count, true, esriCommandStyles.esriCommandStyleTextOnly); } } // Initialize naEnv variables // 初始化naEnv变量 m_naEnv = new EngineNetworkAnalystEnvironmentClass(); m_naEnv.ZoomToResultAfterSolve = false; m_naEnv.ShowAnalysisMessagesAfterSolve = (int)(esriEngineNAMessageType.esriEngineNAMessageTypeInformative | esriEngineNAMessageType.esriEngineNAMessageTypeWarning); // Explicitly setup buddy control and initialize NA extension // so we can get to NAWindow to listen to window events // This is necessary the various controls are not yet setup and they // need to be in order to get the NAWindow's events. // 显式设置伙伴控件并初始化na扩展,以便我们可以访问na window来侦听窗口事件。 // 这是必需的,各种控件尚未设置,它们需要用于获取nawindow的事件。 axToolbarControl1.SetBuddyControl(axMapControl1); IExtension ext = m_naEnv as IExtension; object obj = axToolbarControl1.Object; ext.Startup(ref obj); m_naWindow = m_naEnv.NAWindow; m_onContextMenu = new IEngineNAWindowEventsEx_OnContextMenuEventHandler(OnContextMenu); ((IEngineNAWindowEventsEx_Event)m_naWindow).OnContextMenu += m_onContextMenu; }