ACED_ARXCOMMAND_ENTRY_AUTO用法
时间: 2023-07-30 13:10:56 浏览: 78
ACED_ARXCOMMAND_ENTRY_AUTO 是一个宏,用于简化 AutoCAD 开发中注册命令的过程。它的语法格式如下:
```
ACED_ARXCOMMAND_ENTRY_AUTO(classname, groupname, globcmdname, loccmdname, cmdflags, function, dbx)
```
其中,各个参数的含义如下:
- `classname`:命令所属的类名,通常为 `AcRxClass` 的派生类。
- `groupname`:命令所属的命令组名,用于组织命令菜单和工具栏。
- `globcmdname`:全局命令名,用于在命令行输入或者 Lisp 中调用命令。
- `loccmdname`:本地命令名,同样用于在命令行输入或者 Lisp 中调用命令,但是只在当前文档中有效。
- `cmdflags`:命令标志,可以指定命令的行为,如是否支持撤销、是否需要交互等。
- `function`:命令的实现函数,即命令被调用时所执行的代码。
- `dbx`:命令所涉及的数据库对象,通常为 `AcDbDatabase::kDwgAcadVer`,表示命令在 AutoCAD 中的版本。
使用 ACED_ARXCOMMAND_ENTRY_AUTO 宏可以方便地注册命令,并且支持自动加载和卸载。需要注意的是,该宏只能在 AcadMsg.def 中使用,不能在头文件中定义。
相关问题
ACED_ARXCOMMAND_ENTRY_AUTO用法示例
以下是一个使用 ACED_ARXCOMMAND_ENTRY_AUTO 宏注册命令的示例:
```cpp
#include "acedCmdNF.h"
#include "acdb.h"
#include "adslib.h"
void myCommandFunction()
{
// 实现命令的代码
}
void initApp()
{
acedRegCmds->addCommand("MYGROUP", "MYCOMMAND", "MYCOMMAND", ACRX_CMD_MODAL, myCommandFunction);
}
void unloadApp()
{
acedRegCmds->removeGroup("MYGROUP");
}
extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* ptr)
{
switch (msg)
{
case AcRx::kInitAppMsg:
acrxDynamicLinker->unlockApplication(ptr);
acrxRegisterAppMDIAware(ptr);
initApp();
break;
case AcRx::kUnloadAppMsg:
unloadApp();
break;
}
return AcRx::kRetOK;
}
ACED_ARXCOMMAND_ENTRY_AUTO(acedCmdNF, MyGroup, MyCommand, MyCommand, ACRX_CMD_MODAL, myCommandFunction, AcDbDatabase::kDwgAcadVer);
```
以上代码中,我们使用 ACED_ARXCOMMAND_ENTRY_AUTO 宏注册了一个名为 "MyCommand" 的命令,它所属的命令组为 "MyGroup",在命令行输入或者 Lisp 中调用的命令名为 "MYCOMMAND"。它的实现函数为 myCommandFunction,命令标志为 ACRX_CMD_MODAL,表示该命令是一个模态命令。命令所涉及的数据库对象为 AcDbDatabase::kDwgAcadVer,表示该命令在所有 AutoCAD 版本中都有效。
同时,我们在 acrxEntryPoint 函数中调用了 initApp 和 unloadApp 函数,用于在应用程序加载和卸载时注册和注销命令。
ACED_ARXCOMMAND_ENTRY_AUTO用法可运行的示例
以下是一个可以直接运行的示例,演示了如何使用 ACED_ARXCOMMAND_ENTRY_AUTO 宏注册命令:
```cpp
#include "acedCmdNF.h"
#include "acdb.h"
#include "adslib.h"
void myCommandFunction()
{
acedAlert("Hello World!");
}
void initApp()
{
acedRegCmds->addCommand("MYGROUP", "MYCOMMAND", "MYCOMMAND", ACRX_CMD_MODAL, myCommandFunction);
}
void unloadApp()
{
acedRegCmds->removeGroup("MYGROUP");
}
extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* ptr)
{
switch (msg)
{
case AcRx::kInitAppMsg:
acrxDynamicLinker->unlockApplication(ptr);
acrxRegisterAppMDIAware(ptr);
initApp();
break;
case AcRx::kUnloadAppMsg:
unloadApp();
break;
}
return AcRx::kRetOK;
}
ACED_ARXCOMMAND_ENTRY_AUTO(acedCmdNF, MyGroup, MyCommand, MyCommand, ACRX_CMD_MODAL, myCommandFunction, AcDbDatabase::kDwgAcadVer);
```
以上代码中,我们注册了一个名为 "MyCommand" 的命令,它所属的命令组为 "MyGroup",在命令行输入或者 Lisp 中调用的命令名为 "MYCOMMAND"。它的实现函数为 myCommandFunction,命令标志为 ACRX_CMD_MODAL,表示该命令是一个模态命令。命令所涉及的数据库对象为 AcDbDatabase::kDwgAcadVer,表示该命令在所有 AutoCAD 版本中都有效。
当我们在 AutoCAD 中输入 "MYCOMMAND" 命令时,程序将会弹出一个对话框,显示 "Hello World!"。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)