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("  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;
  • 相关阅读:
    quota磁盘配额
    lvm管理
    快照
    分区工具
    课下测试03!03!03!题目截图及解析(不完全正确)第四周--信息安全系统设计基础
    2017-2018-1 20155307《信息安全技术李冬冬》实验二——Windows口令破解
    2017-2018-1 20155301 20155307 20155339 《信息安全系统设计基础》 实验一 开发环境的熟悉
    2017-2018-1 20155307 《信息安全系统设计基础》第5周学习总结
    PGP的原理与使用
    2017-2018-1 20155307 《信息安全系统设计基础》第四周学习总结
  • 原文地址:https://www.cnblogs.com/zixuan203344/p/14350990.html
Copyright © 2011-2022 走看看