EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 817|回复: 0
打印 上一主题 下一主题

[用户交互] AUTOCAD中添加默认菜单

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12406

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 14:48:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AutoCAD默认的菜单项中添加子菜单。当用户右击鼠标,且CAD中的对象处于未选择状态时,就会出现默认菜单。这也是个添加命令菜单的好地方。

这个方法与跟以前的很相似,尽管为了获取模块初始化时的反馈,我添加了几个额外的命令来添加和移除各个菜单。

几点需要注意的:

我们并不是简单的添加一个菜单项,而是We're not just adding a single menu item, but are using a cascading menu - three menu items underneath a main application menu item.
我们再次使用了 Autodesk.AutoCAD.Internal namespace 命令空间(需要饮用 AcMgdInternal.dll )中的 PostCommandPrompt() 函数。当然,如果通过发送字符串到Execute(),就不需要它了。
代码如下:

  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Runtime;
  5. using Autodesk.AutoCAD.Windows;
  6. using Autodesk.AutoCAD.Internal;
  7. using System;

  8. namespace ContextMenuApplication
  9. {
  10. public class Commands : IExtensionApplication
  11. {
  12. public void Initialize()
  13. {
  14.    CountMenu.Attach();
  15.    ApplicationMenu.Attach();
  16. }
  17. public void Terminate()
  18. {
  19.    CountMenu.Detach();
  20.    ApplicationMenu.Detach();
  21. }

  22. [CommandMethod("ADDCONTEXT")]
  23. static public void AttachContextMenus()
  24. {
  25.    CountMenu.Attach();
  26.    ApplicationMenu.Attach();
  27. }
  28. [CommandMethod("NOCONTEXT")]
  29. static public void DetachContextMenus()
  30. {
  31.    CountMenu.Detach();
  32.    ApplicationMenu.Detach();
  33. }
  34. [CommandMethod("COUNT", CommandFlags.UsePickSet)]
  35. static public void CountSelection()
  36. {
  37.    Editor ed =
  38.       Application.DocumentManager.MdiActiveDocument.Editor;

  39.    PromptSelectionResult psr = ed.GetSelection();
  40.    if (psr.Status == PromptStatus.OK)
  41.    {
  42.       ed.WriteMessage(
  43.       "\nSelected {0} entities.",
  44.       psr.Value.Count
  45.       );
  46.    }
  47. }
  48. }

  49. public class CountMenu
  50. {
  51. private static ContextMenuExtension cme;

  52. public static void Attach()
  53. {
  54.    if (cme == null)
  55.    {
  56.       cme = new ContextMenuExtension();
  57.       MenuItem mi = new MenuItem("Count");
  58.       mi.Click += new EventHandler(OnCount);
  59.       cme.MenuItems.Add(mi);
  60.    }
  61.    RXClass rxc = Entity.GetClass(typeof(Entity));
  62.    Application.AddObjectContextMenuExtension(rxc, cme);
  63. }
  64. public static void Detach()
  65. {
  66.    RXClass rxc = Entity.GetClass(typeof(Entity));
  67.    Application.RemoveObjectContextMenuExtension(rxc, cme);
  68. }
  69. private static void OnCount(Object o, EventArgs e)
  70. {
  71.    Document doc =
  72.       Application.DocumentManager.MdiActiveDocument;
  73.    doc.SendStringToExecute("_.COUNT ", true, false, false);
  74. }
  75. }

  76. public class ApplicationMenu
  77. {
  78. private static ContextMenuExtension cme;

  79. public static void Attach()
  80. {
  81.    if (cme == null)
  82.    {
  83.       cme = new ContextMenuExtension();
  84.       cme.Title = "Kean's commands";
  85.       MenuItem mi1 = new MenuItem("1st");
  86.       mi1.Click += new EventHandler(On1st);
  87.       cme.MenuItems.Add(mi1);
  88.       MenuItem mi2 = new MenuItem("2nd");
  89.       mi2.Click += new EventHandler(On2nd);
  90.       cme.MenuItems.Add(mi2);
  91.       MenuItem mi3 = new MenuItem("3rd");
  92.       mi3.Click += new EventHandler(On3rd);
  93.       cme.MenuItems.Add(mi3);
  94.    }
  95.    Application.AddDefaultContextMenuExtension(cme);
  96. }
  97. public static void Detach()
  98. {
  99.    Application.RemoveDefaultContextMenuExtension(cme);
  100. }
  101. private static void On1st(Object o, EventArgs e)
  102. {
  103.    Editor ed =
  104.       Application.DocumentManager.MdiActiveDocument.Editor;
  105.    ed.WriteMessage("\nFirst item selected.");
  106.    Utils.PostCommandPrompt();
  107. }
  108. private static void On2nd(Object o, EventArgs e)
  109. {
  110.    Editor ed =
  111.       Application.DocumentManager.MdiActiveDocument.Editor;
  112.    ed.WriteMessage("\nSecond item selected.");
  113.    Utils.PostCommandPrompt();
  114. }
  115. private static void On3rd(Object o, EventArgs e)
  116. {
  117.    Editor ed =
  118.       Application.DocumentManager.MdiActiveDocument.Editor;
  119.    ed.WriteMessage("\nThird item selected.");
  120.    Utils.PostCommandPrompt();
  121. }
  122. }
  123. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-27 08:12

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表