• 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;
  • 相关阅读:
    微信小程序开发9-宿主环境(2)
    微信小程序开发8-小程序的宿主环境(1)
    微信小程序开发7-JavaScript脚本
    微信小程序开发6-WXSS
    点击底部input输入框,弹出的软键盘挡住input(苹果手机使用第三方输入法 )
    极光推送能获取 registrationId,但是接收不到通知
    App 运行后屏幕顶部和底部各留黑边问题
    App 分辨率相关
    配置隐私协议
    极光推送小结
  • 原文地址:https://www.cnblogs.com/zixuan203344/p/14350990.html
Copyright © 2020-2023  润新知