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:

ExpandedBlockStart.gif 代码
using  Autodesk.AutoCAD.ApplicationServices;
using  ArxApp  =  Autodesk.AutoCAD.ApplicationServices.Application;
using  ArxDoc  =  Autodesk.AutoCAD.ApplicationServices.Document;
using  Autodesk.AutoCAD.DatabaseServices;
using  Autodesk.AutoCAD.Windows;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值