![]() |
【转帖】如何关联工具栏?(c#)
如何关联工具栏?(c#)
www.dimcax.com 如何关联工具栏?(c#) 我经过几天的寻找和论坛的帮助,知道怎么添加菜单和工具栏了,但是,我发现,自己增加的菜单,只能调用autocad本身存在的命令,如果不是内部命令,如何操作?我想到了事件,但是,那在用户控件中可以容易办到,如果是自己增加的菜单或工具,如何关联到我自己写的函数中呢? c#中,工具栏有一个macro宏,是字符串类型的,如何写这个宏呢? 使用代理,在autodesk官方教程c#中有介绍的。 能举一个简单的例子吗?。 acadapplication acadapp; acadapp = (acadapplication)marshal.getactiveobject("autocad.application"); acadpopupmenu mymenu = acadapp.menugroups.item(0).menus.add("test"); mymenu.addmenuitem(0, "直线", "_line "); mymenu.addmenuitem(1, "圆", "_circle "); mymenu.addseparator(2); acadpopupmenu subm = mymenu.addsubmenu("", "子菜单");//下级菜单 subm.addmenuitem(0, "射线", "xline "); mymenu.addmenuitem(4, "圆弧", "_arc "); mymenu.insertinmenubar(14);//插入到当前菜单组14 ///////////////// 如何将自己定义的函数关联到上面命令中任何一个,比如显示”iloveyou“ 获取选中物体id,此论坛中找的。处理选中事件的。 public class mtest: iextensionapplication { static editor m_ed = autodesk.autocad.applicationservices.application.documentmanager.mdiactivedocument.editor; static int m_num = 0; public void initialize() { m_ed.selectionadded += new selectionaddedeventhandler(m_selectedobject); } void m_selectedobject(object sender, selectionaddedeventargs e) { m_ed.selectionadded -= new selectionaddedeventhandler(m_selectedobject); if (m_num == 3) { promptselectionresult m_psr = m_ed.selectimplied(); if (m_psr.status == promptstatus.ok) { objectid[] m_objids = m_psr.value.getobjectids(); m_ed.writemessage("\n你点击了{0}", m_objids[m_objids.getlength(0) - 1]); } m_num = 0; } else m_num++; m_ed.selectionadded += new selectionaddedeventhandler(m_selectedobject); } public void terminate() { m_ed.selectionadded -= new selectionaddedeventhandler(m_selectedobject); } } 环境菜单使用示例: namespace justcad { /// <summary> /// summary for justcad. /// </summary> public class justcad : iextensionapplication { public void initialize() { //assembly.loadfrom("asdkopmnetext.dll"); addcontextmenu(); drawingpad.addtabdialog(); } public void terminate() { removecontextmenu(); } contextmenuextension m_contextmenu; private void drawingpadcallbackonclick(object sender, eventargs e) { documentlock doclock = autodesk.autocad.applicationservices.application.documentmanager.mdiactivedocument.lockdocument(); drawingpad.showpalette(); doclock.dispose(); } private void propertypadcallbackonclick(object sender, eventargs e) { documentlock doclock = autodesk.autocad.applicationservices.application.documentmanager.mdiactivedocument.lockdocument(); // doclock.dispose(); } private void dwglibinfofmcallbackonclick(object sender, eventargs e) { documentlock doclock = autodesk.autocad.applicationservices.application.documentmanager.mdiactivedocument.lockdocument(); dwglibinfofm fm = new dwglibinfofm(); fm.showdialog(); doclock.dispose(); } private void addcontextmenu() { m_contextmenu = new contextmenuextension(); m_contextmenu.title = "我的扩展功能"; autodesk.autocad.windows.menuitem mi; mi = new autodesk.autocad.windows.menuitem("绘图面板"); mi.click += new eventhandler(drawingpadcallbackonclick); m_contextmenu.menuitems.add(mi); //autodesk.autocad.windows.menuitem mi2; //mi2 = new autodesk.autocad.windows.menuitem("打开模板"); //mi2.click += new eventhandler(propertypadcallbackonclick); //m_contextmenu.menuitems.add(mi2); autodesk.autocad.windows.menuitem mi3; mi3 = new autodesk.autocad.windows.menuitem("模板管理"); mi3.click += new eventhandler(dwglibinfofmcallbackonclick); m_contextmenu.menuitems.add(mi3); autodesk.autocad.applicationservices.application.adddefaultcontextmenuextension(m_contextmenu); } private void removecontextmenu() { if (m_contextmenu != null) { autodesk.autocad.applicationservices.application.removedefaultcontextmenuextension(m_contextmenu); m_contextmenu = null; } } } } |
所有的时间均为北京时间。 现在的时间是 11:43 PM. |