zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    使用递归输出某个目录下所有子目录和文件
    如何进行复杂度分析?
    什么是时间复杂度?什么是空间复杂度?
    什么是复杂度?为什么要进行复杂度分析?
    什么是递归?递归的优缺点是什么?
    Executor 如何使用?
    什么是spring boot?为什么要用?
    spring boot核心配置文件是什么?
    @Autowired的作用是什么?
    @RequestMapping的作用是什么?
  • 原文地址:https://www.cnblogs.com/houlinbo/p/1766141.html
Copyright © 2011-2022 走看看