找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 735|回复: 12

[求助]:请问如何同时注册多个命令?

[复制链接]
发表于 2005-3-13 16:00:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
void InitApplication()
{
       ......
        AddCommand("ZJKM", "KM301", "KM301", ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, ZJkmkm);
       ......
}

void ZJkmkm()
{   
    ......
    const char* name="KM301";
    ......
}

        如上所示,在InitApplication中,我注册了命令“KM301”。在该命令的处理函数ZJkmkm()中,用到了与命令名相同的字符串“KM301”。现在的问题是,我还需要注册类似的命令“KM302”,“KM303”……等等。与以上代码所不同的就是将上面的三处“KM301”换成“KM302”,“KM303”……即可。但是,我又不想重复拷贝大量的代码,请问有什么办法同时注册这些个命令吗?谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-3-13 21:54:23 | 显示全部楼层
再加两行代码咯.其实也不是很烦的/
而且这样也很规范/:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-14 09:43:55 | 显示全部楼层
最初由 up2you_610 发布
[B]再加两行代码咯.其实也不是很烦的/
而且这样也很规范/:) [/B]


        如果再注册一个命令“KM302”,那么要重新写一个处理函数,而这个处理函数与“KM301”的区别仅在于将ZJkmkm()中的字符串“KM301”改为“KM302”。
    如果我要注册的命令有50条,那么就要拷贝大量的代码,会使生成的arx文件比较大。
    我的问题就是有没有办法不重写命令处理函数而实现以上功能。
    谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-14 10:59:58 | 显示全部楼层
定义一个命令,他的功能就 是用来注册多个命令的:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-14 15:04:56 | 显示全部楼层
void InitApplication()
{
......
AddCommand("ZJKM", "KM301", "KM301", ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, ZJkmkm);
......
}

void ZJkmkm()
{
......
const char* name="KM301";
......
}

我的问题其实是,如何实现将以上三处“KM301”换成“KM302”,“KM303”…… 的功能,而不需要重复拷贝这些代码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-14 17:58:29 | 显示全部楼层
定义一个结构体数组
struct cmdtab {
    char cmdGName[20];
   char cmdLName[20];
   void (*fun)();
} cmdTab[] = {
    "KM301",     "KM301",        zjkmkm1,         
  "KM302",        "KM302",        zjkmkm2,
...
};      

在InitAppliction中

for(int i = 0; i < TAB_SIZE; i ++)
{
    AddCommand( "ZJKM",     
        cmdTab.cmdGName,
        cmdTab.cmdLName,
        ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET,   
        cmdTab.fun);   
}

具体怎么产生那个结构体数组,可以再写函数实现,像你那样名字一样,编号不同更好实现了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-14 21:25:52 | 显示全部楼层
最初由 rackyye 发布
[B]定义一个结构体数组
struct cmdtab {
    char cmdGName[20];
   char cmdLName[20];
   void (*fun)();
} cmdTab[] = {
    "KM301",     "KM301",        zjkmkm1,         
  "KM302",        "KM302",        zjkmkm2,
...
}... [/B]


非常感谢6楼的前辈指教!谢谢了!
但还存在一个问题,在函数zjkmkm1中我要用到字符串变量“KM301”,在函数zjkmkm2中我要用到字符串变量“KM302”,……而这些个函数中仅这个字符串不同,其他的部分都相同。有没有办法写一个函数就实现这些功能呢?难道有50个命令我就得写50个函数吗(而这50个函数又仅有一处不同)?
再次请教,麻烦了,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-15 08:17:25 | 显示全部楼层
我没试过在命令函数里带参数的,你可以试试,给你的命令函数zjkmkm加个参数int no. 即定义成
void zjkmkm(int no)
{
   CString cmd;
   if (no < 10) {
       cmd.Format("KM30%d", no);
   }
   else {
       cmd.Format("KM3%d", no);
   }
...
}

在Addcommand里改成cmdTab.fun(i), 不知道行不行的通,我是没用过的,你去试试吧,这些东西都靠不断试验的。


在结构体里定义void (*fun)(int no);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-15 11:47:09 | 显示全部楼层
最初由 rackyye 发布
[B]我没试过在命令函数里带参数的,你可以试试,给你的命令函数zjkmkm加个参数int no. 即定义成
void zjkmkm(int no)
{
   CString cmd;
   if (no < 10) {
       cmd.Format("KM30%d", no);
   }
   else {
... [/B]


谢谢8楼前辈指教!我去试试:)

我还有一个想法,就是在某个命令调用的函数中,有办法获得当前函数对应的命令的命令名吗?(如:在zjkmkm1()中,能够得到它所对应的命令名“KM301”)如果能够的话,就可以解决这个问题了。不知道您遇到过这种情况没有?
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-15 12:07:34 | 显示全部楼层
命令响应函数和命令名是两个平行的东西,是在添加这条命令的时候才把他们关联起来的。应该是没办法在命令响应函数里得到命令名的。至少我没有办法!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-15 15:45:08 | 显示全部楼层
最初由 rackyye 发布
[B]命令响应函数和命令名是两个平行的东西,是在添加这条命令的时候才把他们关联起来的。应该是没办法在命令响应函数里得到命令名的。至少我没有办法! [/B]


感谢rackyye不厌其烦的回答了这么多问题,使我受益匪浅!
多谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-15 16:54:23 | 显示全部楼层
我想你需要的是 写一下 ads 函数,也许这样作能达到你的想法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-16 15:12:04 | 显示全部楼层
最初由 bluewood_cn 发布
[B]我想你需要的是 写一下 ads 函数,也许这样作能达到你的想法。 [/B]


多谢12楼前辈!
ads函数?您能简要介绍一下ads函数,以及我该做的大概思路吗?
谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-16 09:43 , Processed in 0.206216 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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