• AutoCAD: 添加鼠标快捷键/鼠标右键


    Autodesk.AutoCAD.ApplicationServices.Application 支持两种 ContextMenu 扩展:DefaultContextMenu 和 ObjectContextMenu。

    DefaultContextMenu:当前上下文环境没有选中任何 Entity 情况下的快捷菜单。

    ObjectContextMenu:当前上下文环境选中指定类型 Entity 情况下的快捷菜单。如下图:

            #region AddContextMenu
            
    /// <summary>
            
    /// 添加右键菜单
            
    /// </summary>
            private void AddContextMenu()
            {
                
    try
                {
                    
    // DefaultContextMenu
                    ContextMenuExtension defaultContextMenu = new ContextMenuExtension();
                    defaultContextMenu.Title 
    = "MyDefaultContextMenu";
                    Autodesk.AutoCAD.Windows.MenuItem defaultContextMenu_Item1 
    = new Autodesk.AutoCAD.Windows.MenuItem("MyDefaultContextMenu_Item1", ARX.UI.Resources.Resource1.taobao);
                    defaultContextMenu_Item1.Click 
    += new EventHandler(defaultContextMenu_OnClick);
                    defaultContextMenu.MenuItems.Add(defaultContextMenu_Item1);
                    ArxApp.AddDefaultContextMenuExtension(defaultContextMenu);

                    
    // ObjectContextMenu
                    ContextMenuExtension objContextMenu = new ContextMenuExtension();
                    objContextMenu.Title 
    = "MyObjectContextMenu";
                    objContextMenu.Popup 
    += new EventHandler(objContextMenu_Popup);

                    Autodesk.AutoCAD.Windows.MenuItem objContextMenu_Item1 
    = new Autodesk.AutoCAD.Windows.MenuItem("Go to Baidu", ARX.UI.Resources.Resource1.baidu);
                    objContextMenu_Item1.Click 
    += new EventHandler(objContextMenu_Item1_Click);
                    objContextMenu.MenuItems.Add(objContextMenu_Item1);

                    Autodesk.AutoCAD.Windows.MenuItem objContextMenu_Item2 
    = new Autodesk.AutoCAD.Windows.MenuItem("Go to Google", ARX.UI.Resources.Resource1.google);
                    objContextMenu_Item2.Click 
    += new EventHandler(objContextMenu_Item2_Click);
                    objContextMenu.MenuItems.Add(objContextMenu_Item2);

                    ArxApp.AddObjectContextMenuExtension(RXObject.GetClass(
    typeof(Polyline)), objContextMenu);
                }
                
    catch (System.Exception exc)
                {
                    WriteLine(
    string.Format("\n ContextMenu error: {0}", exc.Message));
                }
            }

            
    void objContextMenu_Popup(object sender, EventArgs e)
            {
                
    using (DocumentLock docLock = ArxApp.DocumentManager.MdiActiveDocument.LockDocument())
                {
                    Document doc 
    = Application.DocumentManager.MdiActiveDocument;
                    Database db 
    = doc.Database;
                    Editor ed 
    = doc.Editor;
                    
    bool visible = true;

                    
    //If that is multiple selection, disabled the menu item.
                    PromptSelectionResult selectionRes = ed.SelectImplied();
                    
    if (selectionRes.Status == PromptStatus.OK)
                    {
                        ObjectId[] objIds 
    = selectionRes.Value.GetObjectIds();
                        
    if (objIds != null && objIds.Length > 1)
                        {
                            visible 
    = false;
                        }
                    }

                    ContextMenuExtension objContextMenu 
    = sender as ContextMenuExtension;
                    
    if (objContextMenu != null)
                    {
                        
    foreach (MenuItem item in objContextMenu.MenuItems)
                        {
                            item.Enabled 
    = visible;
                        }
                    }
                }
            }

            
    private void defaultContextMenu_OnClick(object sender, EventArgs e)
            {
                
    using (DocumentLock docLock = ArxApp.DocumentManager.MdiActiveDocument.LockDocument())
                {
                    ArxApp.ShowAlertDialog(
    "defaultContextMenu_OnClick");
                }
            }

            
    void objContextMenu_Item1_Click(object sender, EventArgs e)
            {
                
    using (DocumentLock docLock = ArxApp.DocumentManager.MdiActiveDocument.LockDocument())
                {
                    System.Diagnostics.Process.Start(
    "IEXPLORE.EXE""http://www.baidu.com");
                }
            }

            
    void objContextMenu_Item2_Click(object sender, EventArgs e)
            {
                
    using (DocumentLock docLock = ArxApp.DocumentManager.MdiActiveDocument.LockDocument())
                {
                    System.Diagnostics.Process.Start(
    "IEXPLORE.EXE""http://www.google.com");
                }
            }

            
    #endregion

     可以在 objContextMenu_Popup 事件中做一些逻辑处理。

    下面是用到的namespace:

    代码
    using Autodesk.AutoCAD.ApplicationServices;
    using ArxApp = Autodesk.AutoCAD.ApplicationServices.Application;
    using ArxDoc = Autodesk.AutoCAD.ApplicationServices.Document;
    using Autodesk.AutoCAD.DatabaseServices;
    using Autodesk.AutoCAD.Windows;
  • 相关阅读:
    JavaScript
    94.Binary Tree Inorder Traversal
    144.Binary Tree Preorder Traversal
    106.Construct Binary Tree from Inorder and Postorder Traversal
    105.Construct Binary Tree from Preorder and Inorder Traversal
    90.Subsets II
    78.Subsets
    83.Merge Sorted Array
    80.Remove Duplicates from Sorted Array II
    79.Word Search
  • 原文地址:https://www.cnblogs.com/houlinbo/p/1766141.html
Copyright © 2020-2023  润新知