如何关联工具栏?(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;
}
}
}
}