用户需要右键弹出菜单,则需要响应鼠标事件,右键按下后,弹出菜单分为在命令下运行及在非命令下运行,具体介绍如下(C#语言参考例子:"samples\CSharpRightKeyMenu\CSharpRightKeyMenu.sln") :
一、新建菜单文件
1、新一个文本文件: mxpoptest.mnu,内容如下(此文件为在命令下运行菜单):
|
此处的关键字为命令行提示命令。
2、新一个文本文件: MxPopMenuEnt.mnu,内容如下(此文件为在非命令下运行点击实体菜单):
|
3、新一个文本文件: MxPopMenu.mnu,内容如下(此文件为在非命令下运行无实体右击菜单):
|
4、文件中第一行是菜单文件头,每列内容如下 :
文件类型字符串 | 资源文件名(后面菜单的图标默认从该dll中加载) | 图标的透明颜色 | 位置 | 菜单名 |
"MxDrawMenuBarFile" | "MxDraw.dll" | (214 211 206) | "top" | "弹出菜单" |
“//”是文件中的注释
文件中后面每行代表一个菜单项
"POPMENUS" "对象(&O)",表示一个弹出菜单开始
"POPMENUE" 表示弹出菜单的结束
"SEPARATOR" 表示弹出菜单的分割线
5、后面每列的内容如下:
命令名称 | 点击执行的命令 | 图标索引字符串 | 资源文件名 | 命令提示字符串 | "命令ID" | ID类型(目前控件内部使用,一般为空) |
"新建(&N)" | Mx_New | "IDB_NEW_BITMAP" | "" | "" | "" | "" |
命令名称:
新建(&N)。
点击执行的命令:
C++使用acedRegCmds->addCommand注册命令。
其它语言使用DMxDrawX::RegistUserCustomCommand注册命令。
图标索引字符串:
IDB_NEW_BITMAP。
资源文件名:
(1)为空取默认资源文件名,该名称需要去掉控件版本号如:MxDraw52.dll写成MxDraw.dll,控件会根据具体情况加上这个版本号。
(2)资源文件如是local:开头,表示是一个本地bmp文件,如:取mytoolbar.bmp做工具按钮图标:local:mytoolbar.bmp
比如:菜单图标从本地bmp文件加载:
"自定义新建(&N)" "Mx_New" "IDB_NEW_BITMAP" "local:mytoolbar.bmp"
(3)资源文件如是web:开头,表示是一个网络服务器上的bmp文件,如:取mytoolbar.bmp做工具按钮图标: web:mytoolbar.bmp
比如:菜单图标从服务器bmp文件加载,bmp文件与菜单文件在同一个服务器目录中:
"自定义新建(&N)" "Mx_New" "IDB_NEW_BITMAP" "web:mytoolbar.bmp"
命令提示字符串:
为空。
命令ID:
指定菜单点击后响应的命令事件id,如不为空,可以在CAD控件的命令执行事件中响应菜单点击事件: ImplementCommandEvent。
ID类型:
目前CAD控件内部使用,一般为空。
2、响应鼠标右键事件,弹出菜单
(1)主要用到函数说明:_DMxDrawX::TrackPopupMenu
在指定位置弹出一个菜单。详细说明如下:
参数 | 说明 |
DOUBLE dX | 弹出菜单的位置X值,是文档坐标 |
DOUBLE dY | 弹出菜单的位置Y值,是文档坐标 |
sMenuFile | 菜单定义文件,支持http开头的网络路径 |
|
三、响应命令执行事件
如下:
|
四、运行效果如下
1、当CAD控件视区无实体时用户右击效果:
2、当CAD控件视区有实体时用户右击实体效果:
3、当CAD控件在命令下运行时用户右击实体效果:
4、用户定义命令执行效果: