如何在ARX中终止一个命令?
我使用反应器监测命令,当不允许该用户进行此操作时,系统应该终止当前Acad名令,但是,我将cmdStr=""后,命令继续执行,我该怎么办???
void AsdkEdReactor::commandWillStart(const char * cmdStr)
{
CString strCmd;
strCmd = cmdStr;
if(!UserHasRights(strCmd))
{
AfxMessageBox("对不起,您没有该操作的权限!");
cmdStr = "";
return;
}
}
或者其他实现方式?只要能终止用户的操作即可???
用acedCommand()向ACAD命令行发送两次[esc]试试,该键ASCII码为27。
能具体点吗??谢啦
系统提示严重错误???
在原帖子中添加acedCommand(RTSTR,char(27),RTSTR,char(27),0);Acad会提示严重错误,然后自动终止不给任何反应机会。怎么办???
可能要这样
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;
}
}
我已经试过了,在第一个Command时即出错?
或者能否将Acad的Save\dxfout等命令重载?
或者能否将Acad的Save\dxfout等命令重载?我已经试过通过AddCommand的方法无法将此类命令重载,
所以我才想到通过命令监测的方式进行监控??
Re:
本帖最后由 leeyeafu 于 2002-12-5 14:46:51 编辑我也曾试过想要重载ACAD系统命令,但实现不了。ARX帮助中说使用AcEdCommandStack::popGroupToTop()函数可将命令移动到命令栈顶,但实际上好象ACAD系统内部命令仍然优先于ARX命令,无法执行到命令的重载版本。这一招只对自定义的ARX命令有效。(尽管ARX程序编译不会有问题。)书上说,自己编写的ARX命令能与ACAD内部命令一样执行,看来还是有区别呀!
至于acedCommand()命令严重错误,我想可能与你其它代码有关。你看这样行不行:你将调试要用到的代码(我想,主要是反应器部分的代码)发到我的邮箱里,我试着调试一下。这样也省得我重写反应器代码。不过,今天可能来不及了,你知道的,调试是件很辛苦的事。:(
本站源码分析版块有个主题,题目是《能帮我优化一下吗?》,你去看看,对你可能有用,不过那是VBA的。
最后,你的另一个问题,我的确没明白你的意图,只能告诉你,删除不在选定范围内实体可调用erase()函数。{可能又误会了:(}至于OICQ,不瞒你说,除明经聊天室外(还老没人),我没进过聊天室。我上班用的是局域网,上QQ要使用代理服务器,麻烦!
邮件收到,但不好意思......
好象在commandWillStart()函数中不能用acedCommand()方法干涉命令的执行。你的反应器代码没有问题。甚至我将你的程序重写为MFC动态链接库,用Windows API函数CWnd::SendMessage()向ACAD命令行发送消息,希望能中断ACAD命令的执行,ACAD仍然报“内存读写错误!”。(发送其它消息能正常响应,就是不能发送字符。)当然ACAD的SAVE命令实际上要弹出一个对话框,我不知道如何得到该对话框的句柄,所以也不知道向此对话框发送消息的方法能否成功。我不知道该如何继续。希望两位版主或其他大侠出手。
页:
[1]
2