![]() |
【转帖】obkectarx为cad添加新的菜单
obkectarx为cad添加新的菜单
obkectarx为cad添加新的菜单 请教各位怎样使用objectarx为cad添加新的菜单和菜单项。 相关的代码怎么写啊 谢谢! 看帮助com and activex automation中有 void addmenuthroughcom() { autocad::iacadapplication *pacad; autocad::iacadmenubar *pmenubar; autocad::iacadmenugroups *pmenugroups; autocad::iacadmenugroup *pmenugroup; autocad::iacadpopupmenus *ppopupmenus; autocad::iacadpopupmenu *ppopupmenu; autocad::iacadpopupmenuitem *ppopupmenuitem; hresult hr = noerror; clsid clsid; lpunknown punk = null; lpdispatch pacaddisp = null; hr = ::clsidfromprogid(l"autocad.application", &clsid); if (failed(hr)) return; if(::getactiveobject(clsid, null, &punk) != s_ok) return; hr = punk->queryinterface(iid_idispatch, (lpvoid*) &pacaddisp); punk->release(); if (failed(hr)) return; hr = pacaddisp->queryinterface(autocad::iid_iacadapplication, (void**)&pacad); pacaddisp->release(); if (failed(hr)) return; pacad->put_visible(true); pacad->get_menubar(&pmenubar); pacad->get_menugroups(&pmenugroups); pacad->release(); long numberofmenus; pmenubar->get_count(&numberofmenus); pmenubar->release(); variant index; variantinit(&index); v_vt(&index) = vt_i4; v_i4(&index) = 0; pmenugroups->item(index, &pmenugroup); pmenugroups->release(); pmenugroup->get_menus(&ppopupmenus); pmenugroup->release(); wchar wstrmenuname[256]; multibytetowidechar(cp_acp, mb_precomposed, "asdkcomaccess", -1, wstrmenuname, 256); if (!bismenuloaded) { ppopupmenus->add(wstrmenuname, &ppopupmenu); if (ppopupmenu != null) { ppopupmenu->put_name(wstrmenuname); wchar wstrmenuitemname[256]; multibytetowidechar(cp_acp, 0,"&add a comcircle", -1, wstrmenuitemname, 256); wchar wstrmenuitemmacro[256]; multibytetowidechar(cp_acp, 0, "asdkcomcircle ", -1, wstrmenuitemmacro, 256); variantinit(&index); v_vt(&index) = vt_i4; v_i4(&index) = 0; ppopupmenu->addmenuitem(index, wstrmenuitemname, wstrmenuitemmacro, &ppopupmenuitem); variantinit(&index); v_vt(&index) = vt_i4; v_i4(&index) = 1; ppopupmenu->addseparator(index, &ppopupmenuitem); multibytetowidechar(cp_acp, 0, "auto&lisp example", -1, wstrmenuitemname, 256); multibytetowidechar(cp_acp, 0, "(prin1 \"hello\") ", -1, wstrmenuitemmacro, 256); variantinit(&index); v_vt(&index) = vt_i4; v_i4(&index) = 2; ppopupmenu->addmenuitem(index, wstrmenuitemname, wstrmenuitemmacro, &ppopupmenuitem); variantinit(&index); v_vt(&index) = vt_i4; v_i4(&index) = numberofmenus - 2;; ppopupmenu->insertinmenubar(index); ppopupmenu->release(); ppopupmenuitem->release(); bismenuloaded = true; } else { acutprintf("\nmenu not created."); } } else { variantinit(&index); v_vt(&index) = vt_bstr; v_bstr(&index) = wstrmenuname; ppopupmenus->removemenufrommenubar(index); variantclear(&index); bismenuloaded = false; } ppopupmenus->release(); } |
所有的时间均为北京时间。 现在的时间是 12:19 PM. |