About the Implementing a property page for an ArcGIS Engine application Sample
[C#]
TocContextMenuClass.cs
using System; using System.Runtime.InteropServices; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.SystemUI; using ESRI.ArcGIS.Controls; namespace MapControlAppPropertyPage { /// <summary> /// Context menu class hosting ArcObject commands /// </summary> public class TocContextMenuClass { //class members //the underlying toolbarMenu that will be used protected IToolbarMenu2 m_toolbarMenu = null; //a data-structure used in order to store and manage item definitions private struct ItemDef { //public members public string itemDef; public bool group; public int subType; //constructor public ItemDef(string itd, bool grp, int subtype) { itemDef = itd; group = grp; subType = subtype; } }; //array of item definitions with will be used to create the commends for the context menu private ItemDef[] m_itemDefs = { new ItemDef("SymbolSelector.FeatureLayerSymbology", false, -1) }; /// <summary> /// class constructor /// </summary> /// <param name="hook"></param> public TocContextMenuClass(object hook) { m_toolbarMenu = new ToolbarMenuClass(); m_toolbarMenu.SetHook(hook); AddItems(); } /// <summary> /// popup the context menu at the given location /// </summary> /// <param name="X"></param> /// <param name="Y"></param> /// <param name="hWndParent"></param> public void PopupMenu(int X, int Y, int hWndParent) { m_toolbarMenu.PopupMenu(X, Y, hWndParent); } /// <summary> /// add the items from the ItemDef array to the menu /// </summary> private void AddItems() { try { object obj = null; foreach (ItemDef item in m_itemDefs) { try { obj = Activator.CreateInstance(Type.GetTypeFromProgID(item.itemDef)); } catch { continue; } m_toolbarMenu.AddItem(obj, item.subType, -1, item.group, esriCommandStyles.esriCommandStyleIconAndText); } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } } /// <summary> /// Incase that the user would want to add an item at runtime /// </summary> /// <param name="item"></param> /// <param name="beginGroup"></param> /// <param name="subType"></param> public void AddItem(object item, bool beginGroup, int subType) { m_toolbarMenu.AddItem(item, subType, -1, beginGroup, esriCommandStyles.esriCommandStyleIconAndText); } } }
[Visual Basic .NET]
TocContextMenuClass.vb
Imports Microsoft.VisualBasic Imports System Imports System.Runtime.InteropServices Imports ESRI.ArcGIS.esriSystem Imports ESRI.ArcGIS.SystemUI Imports ESRI.ArcGIS.Controls Namespace MapControlAppPropertyPage ''' <summary> ''' Context menu class hosting ArcObject commands ''' </summary> Public Class TocContextMenuClass 'class members 'the underlying toolbarMenu that will be used Protected m_toolbarMenu As IToolbarMenu2 = Nothing 'a data-structure used in order to store and manage item definitions Private Structure ItemDef 'public members Public itemDef As String Public group As Boolean Public subType As Integer 'constructor Public Sub New(ByVal itd As String, ByVal grp As Boolean, ByVal subtype As Integer) itemDef = itd group = grp subtype = subtype End Sub End Structure 'array of item definitions with will be used to create the commends for the context menu Private m_itemDefs As ItemDef() = { New ItemDef("SymbolSelector.FeatureLayerSymbology", False, -1) } ''' <summary> ''' class constructor ''' </summary> ''' <param name="hook"></param> Public Sub New(ByVal hook As Object) m_toolbarMenu = New ToolbarMenuClass() m_toolbarMenu.SetHook(hook) AddItems() End Sub ''' <summary> ''' popup the context menu at the given location ''' </summary> ''' <param name="X"></param> ''' <param name="Y"></param> ''' <param name="hWndParent"></param> Public Sub PopupMenu(ByVal X As Integer, ByVal Y As Integer, ByVal hWndParent As Integer) m_toolbarMenu.PopupMenu(X, Y, hWndParent) End Sub ''' <summary> ''' add the items from the ItemDef array to the menu ''' </summary> Private Sub AddItems() Try Dim obj As Object = Nothing For Each item As ItemDef In m_itemDefs Try obj = Activator.CreateInstance(Type.GetTypeFromProgID(item.itemDef)) Catch Continue For End Try m_toolbarMenu.AddItem(obj, item.subType, -1, item.group, esriCommandStyles.esriCommandStyleIconAndText) Next item Catch ex As Exception System.Diagnostics.Trace.WriteLine(ex.Message) End Try End Sub ''' <summary> ''' Incase that the user would want to add an item at runtime ''' </summary> ''' <param name="item"></param> ''' <param name="beginGroup"></param> ''' <param name="subType"></param> Public Sub AddItem(ByVal item As Object, ByVal beginGroup As Boolean, ByVal subType As Integer) m_toolbarMenu.AddItem(item, subType, -1, beginGroup, esriCommandStyles.esriCommandStyleIconAndText) End Sub End Class End Namespace