明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4156|回复: 15

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

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

或者其他实现方式?只要能终止用户的操作即可???

发表于 2002-12-5 11:18 | 显示全部楼层

用acedCommand()向ACAD命令行发送两次[esc]试试,该键ASCII码为27。

 楼主| 发表于 2002-12-5 11:52 | 显示全部楼层

能具体点吗??谢啦

 楼主| 发表于 2002-12-5 11:59 | 显示全部楼层

系统提示严重错误???

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

可能要这样

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;
}
}
 楼主| 发表于 2002-12-5 13:50 | 显示全部楼层

我已经试过了,在第一个Command时即出错?

 楼主| 发表于 2002-12-5 14:00 | 显示全部楼层

或者能否将Acad的Save\dxfout等命令重载?

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

Re:

本帖最后由 leeyeafu 于 2002-12-5 14:46:51 编辑

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

邮件收到,但不好意思......

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-5 22:32 , Processed in 0.316225 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表