请教个人定制的菜单的控制问题
<P>个人定制好的菜单,希望通过程序控制其一些子菜单项可用或不可用</P><P>其实以前的贴子也有了介绍,但是偶照着做好象不行,不知道哪里出了问题</P>
<P>还请哪位达人指点一二:</P>
<P>首先个人定制的菜单:</P>
<P>***Comment<BR> 版权所有 (C) ……大学流体工程所<BR>***MENUGROUP=fan</P>
<P>***POP1<BR>[风机(&F)]<BR>[--]<BR>ID_FANCOMPUTE [气动计算(&C)]^C^CFAN_COMPUTE<BR>[--]<BR>ID_FANBLADE [->叶片设计(&B)]<BR>ID_FANBLADESHAPE [叶片造型(&M)]^C^CFAN_SHAPE<BR>ID_FANBLADESHOW [<-风叶显示(&S)]^C^CFAN_SHOW</P>
<P>在程序中假设希望点击ID_FANCOMPUTE 菜单后,ID_FANBLADESHOW 菜单变灰</P>
<P>int fan_compute()</P>
<P>{</P>
<P> acedMenuCmd("fan.ID_FANBLADESHOW = ~");</P>
<P> ……</P>
<P>}</P>
<P>这样好象没反应耶,怎么回事呢?</P>
<P>另外,菜单项变灰了后再想使它可用,又该怎么办呢?</P>
<P>thx!</P> 楼主是不是用LISP来调用自定义菜单的?能否贴出你的LISP代码给我一个参考啊?谢谢! <P>呵呵不是的,就是用ARX加载菜单的</P> <P><A name=53595><FONT color=#000066><B>zenggq</B></FONT></A> 你好,能不能分享一下你用ARX加载菜单的代码呢?</P>
<P>我现在也需要加载我自己定义的菜单,做了一个*.mnu文件,但不知道如何在ARX里加载.</P>
<P>谢谢</P> <P><BR>//加载菜单<BR>void loadMenu()<BR>{<BR> // 取得AutoCAD应用程序对象<BR> IAcadApplication *acadApp = NULL;<BR> LPDISPATCH pDisp = NULL;</P>
<P> if (!getApplication(&pDisp))<BR> {<BR> acadApp->Release();<BR> return;<BR> }<BR> HRESULT hr = S_OK;</P>
<P> hr = pDisp->QueryInterface(IID_IAcadApplication, (LPVOID*)&acadApp);<BR> if (FAILED(hr))<BR> {<BR> acadApp->Release();<BR> return;<BR> }<BR> // 取得所有菜单组<BR> IAcadMenuGroups *mnuGrps = NULL;<BR> long cnt = 0;<BR> hr = acadApp->get_MenuGroups(&mnuGrps);<BR> if (FAILED(hr))<BR> {<BR> acadApp->Release();<BR> return;<BR> }<BR> acadApp->Release();<BR> // 菜单组个数<BR> mnuGrps->get_Count(&cnt);<BR> IAcadMenuGroup *mnuGrp = NULL;<BR> // 循环所有菜单组,寻找菜单组,if false, load "fan.mnu".<BR> VARIANT vtName;<BR> vtName.vt = VT_I4;<BR> BSTR grpName;<BR> bool found = false;<BR> for (long i = 0; i < cnt; i++)<BR> {<BR> vtName.lVal = i;<BR> hr = mnuGrps->Item(vtName, &mnuGrp);<BR> if (FAILED(hr))<BR> return;<BR> hr = mnuGrp->get_Name(&grpName);<BR> CString cgrpName(grpName);<BR> if (cgrpName.CompareNoCase("fan") == 0)<BR> {<BR> found = true;<BR> break;<BR> }<BR> }<BR> mnuGrps->Release();<BR> if (found == false)<BR> {<BR>// CommandB();<BR> CString mac = "(COMMAND \"_MENULOAD\" \"fan.mnu\")"; <BR> if (acDocManager->curDocument())<BR> {<BR> acedPostCommand(mac);<BR> //如果P12不存在,则新载入的菜单加到当前菜单最后面<BR> acedPostCommand("(menucmd \"P11=+fan.pop1\")"); <BR> }<BR>// CommandE();<BR> }<BR> mnuGrp->Release();<BR> return;<BR>}</P>
<P>bool getApplication(LPDISPATCH * pVal)<BR>{<BR> LPDISPATCH pDispatch = acedGetAcadWinApp()->GetIDispatch(TRUE);<BR> if (pDispatch == NULL)<BR> return false;<BR> *pVal = pDispatch;<BR> return true;<BR>}</P>
<P> 另外loadmenu函数要加入到入口函数的case AcRx::kInitAppMsg:下面,这样AutoCAD可以自动加载它</P>
<P>再加上下面两个头文件(很大的头文件,我也不知道可不可以加小一点的头文件)</P>
<P>#include "acad15.h"<BR>#include "acad15_i.c"</P> <P>前面不是有好几位大虾解答了如何让菜单变灰的方法嘛?</P>
<P>现在怎么没人出来指点一下偶的问题呢?</P> <A name=53681><FONT color=#000066><B>zenggq</B></FONT></A> ,谢谢你分享的代码! <P>顶到有人回答为止,呵呵!</P>
<P>召唤版主大人现身!</P> <P>没人回答偶</P>
<P>MY heart will be broken!</P> 俺也想学习一下
页:
[1]