乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 118|回复: 5

如何在ARX中终止一个命令?

[复制链接]

11

主题

36

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2002-12-5 10:24:00 | 显示全部楼层 |阅读模式
我使用反应器监测命令,当不允许该用户进行此操作时,系统应该终止当前Acad名令,
但是,我将cmdStr=""后,命令继续执行,我该怎么办???
void AsdkEdReactor::commandWillStart(const char * cmdStr)
{
        CString strCmd;
        strCmd = cmdStr;
        if(!UserHasRights(strCmd))
        {
                AfxMessageBox("对不起,您没有该操作的权限!");
                cmdStr = "";
                return;
        }
}
回复

使用道具 举报

11

主题

36

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2002-12-5 11:59:00 | 显示全部楼层
在原帖子中添加acedCommand(RTSTR,char(27),RTSTR,char(27),0);
Acad会提示严重错误,然后自动终止不给任何反应机会。怎么办???
回复

使用道具 举报

14

主题

230

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
286
发表于 2002-12-5 13:03:00 | 显示全部楼层
void AsdkEdReactor::commandWillStart(const char * cmdStr)
{
CString strCmd;
strCmd = cmdStr;
if(!UserHasRights(strCmd))
{
AfxMessageBox("对不起,您没有该操作的权限!");
acedCommand(RTSTR,char(27),0);
acedCommand(RTSTR,char(27),0);
return;
}
}
回复

使用道具 举报

11

主题

36

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2002-12-5 14:00:00 | 显示全部楼层
或者能否将Acad的Save\dxfout等命令重载?
我已经试过通过AddCommand的方法无法将此类命令重载,
所以我才想到通过命令监测的方式进行监控??
回复

使用道具 举报

14

主题

230

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
286
发表于 2002-12-5 14:46:00 | 显示全部楼层

我也曾试过想要重载ACAD系统命令,但实现不了。ARX帮助中说使用AcEdCommandStack::popGroupToTop()函数可将命令移动到命令栈顶,但实际上好象ACAD系统内部命令仍然优先于ARX命令,无法执行到命令的重载版本。这一招只对自定义的ARX命令有效。(尽管ARX程序编译不会有问题。)书上说,自己编写的ARX命令能与ACAD内部命令一样执行,看来还是有区别呀!
至于acedCommand()命令严重错误,我想可能与你其它代码有关。你看这样行不行:你将调试要用到的代码(我想,主要是反应器部分的代码)发到我的邮箱里,我试着调试一下。这样也省得我重写反应器代码。不过,今天可能来不及了,你知道的,调试是件很辛苦的事。:(
本站源码分析版块有个主题,题目是《能帮我优化一下吗?》,你去看看,对你可能有用,不过那是VBA的。
最后,你的另一个问题,我的确没明白你的意图,只能告诉你,删除不在选定范围内实体可调用erase()函数。{可能又误会了:(}至于OICQ,不瞒你说,除乐筑天下聊天室外(还老没人),我没进过聊天室。我上班用的是局域网,上QQ要使用代理服务器,麻烦!
回复

使用道具 举报

14

主题

230

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
286
发表于 2002-12-6 12:25:00 | 显示全部楼层
好象在commandWillStart()函数中不能用acedCommand()方法干涉命令的执行。你的反应器代码没有问题。甚至我将你的程序重写为MFC动态链接库,用Windows API函数CWnd::SendMessage()向ACAD命令行发送消息,希望能中断ACAD命令的执行,ACAD仍然报“内存读写错误!”。(发送其它消息能正常响应,就是不能发送字符。)当然ACAD的SAVE命令实际上要弹出一个对话框,我不知道如何得到该对话框的句柄,所以也不知道向此对话框发送消息的方法能否成功。
我不知道该如何继续。希望两位版主或其他大侠出手。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 05:52 , Processed in 0.146363 second(s), 64 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表