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;

 

posted @ 2010-06-27 13:26  houlinbo  阅读(3400)  评论(0编辑  收藏  举报