几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(C++)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


回复
 
主题工具 搜索本主题 显示模式
旧 2009-04-18, 08:15 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】请教个人定制的菜单的控制问题

请教个人定制的菜单的控制问题
请教个人定制的菜单的控制问题
个人定制好的菜单,希望通过程序控制其一些子菜单项可用或不可用
其实以前的贴子也有了介绍,但是偶照着做好象不行,不知道哪里出了问题
还请哪位达人指点一二:
首先个人定制的菜单:
***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!
壁立千仞,无欲则刚;
海纳百川,有容乃大!
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 09:25 PM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多