![]() |
【转帖】请教个人定制的菜单的控制问题
请教个人定制的菜单的控制问题
请教个人定制的菜单的控制问题 个人定制好的菜单,希望通过程序控制其一些子菜单项可用或不可用 其实以前的贴子也有了介绍,但是偶照着做好象不行,不知道哪里出了问题 还请哪位达人指点一二: 首先个人定制的菜单: ***comment 版权所有 (c) ……大学流体工程所 ***menugroup=fan ***pop1 [风机(&f)] [--] id_fancompute [气动计算(&c)]^c^cfan_compute [--] id_fanblade [->叶片设计(&b)] id_fanbladeshape [叶片造型(&m)]^c^cfan_shape id_fanbladeshow [<-风叶显示(&s)]^c^cfan_show 在程序中假设希望点击id_fancompute 菜单后,id_fanbladeshow 菜单变灰 int fan_compute() { acedmenucmd("fan.id_fanbladeshow = ~"); …… } 这样好象没反应耶,怎么回事呢? 另外,菜单项变灰了后再想使它可用,又该怎么办呢? thx! 壁立千仞,无欲则刚; 海纳百川,有容乃大! 楼主是不是用lisp来调用自定义菜单的?能否贴出你的lisp代码给我一个参考啊?谢谢! 呵呵不是的,就是用arx加载菜单的 壁立千仞,无欲则刚; 海纳百川,有容乃大! zenggq 你好,能不能分享一下你用arx加载菜单的代码呢? 我现在也需要加载我自己定义的菜单,做了一个*.mnu文件,但不知道如何在arx里加载. 谢谢 //加载菜单 void loadmenu() { // 取得autocad应用程序对象 iacadapplication *acadapp = null; lpdispatch pdisp = null; if (!getapplication(&pdisp)) { acadapp->release(); return; } hresult hr = s_ok; hr = pdisp->queryinterface(iid_iacadapplication, (lpvoid*)&acadapp); if (failed(hr)) { acadapp->release(); return; } // 取得所有菜单组 iacadmenugroups *mnugrps = null; long cnt = 0; hr = acadapp->get_menugroups(&mnugrps); if (failed(hr)) { acadapp->release(); return; } acadapp->release(); // 菜单组个数 mnugrps->get_count(&cnt); iacadmenugroup *mnugrp = null; // 循环所有菜单组,寻找[fan]菜单组,if false, load "fan.mnu". variant vtname; vtname.vt = vt_i4; bstr grpname; bool found = false; for (long i = 0; i < cnt; i++) { vtname.lval = i; hr = mnugrps->item(vtname, &mnugrp); if (failed(hr)) return; hr = mnugrp->get_name(&grpname); cstring cgrpname(grpname); if (cgrpname.comparenocase("fan") == 0) { found = true; break; } } mnugrps->release(); if (found == false) { // commandb(); cstring mac = "(command \"_menuload\" \"fan.mnu\")"; if (acdocmanager->curdocument()) { acedpostcommand(mac); //如果p12不存在,则新载入的菜单加到当前菜单最后面 acedpostcommand("(menucmd \"p11=+fan.pop1\")"); } // commande(); } mnugrp->release(); return; } bool getapplication(lpdispatch * pval) { lpdispatch pdispatch = acedgetacadwinapp()->getidispatch(true); if (pdispatch == null) return false; *pval = pdispatch; return true; } 另外loadmenu函数要加入到入口函数的case acrx::kinitappmsg:下面,这样autocad可以自动加载它 再加上下面两个头文件(很大的头文件,我也不知道可不可以加小一点的头文件) #include "acad15.h" #include "acad15_i.c" 壁立千仞,无欲则刚; 海纳百川,有容乃大! 前面不是有好几位大虾解答了如何让菜单变灰的方法嘛? 现在怎么没人出来指点一下偶的问题呢? 壁立千仞,无欲则刚; 海纳百川,有容乃大! zenggq ,谢谢你分享的代码! 顶到有人回答为止,呵呵! 召唤版主大人现身! 壁立千仞,无欲则刚; 海纳百川,有容乃大! 没人回答偶 my heart will be broken! 壁立千仞,无欲则刚; 海纳百川,有容乃大! |
| 所有的时间均为北京时间。 现在的时间是 06:37 AM. |