0
点赞
收藏
分享

微信扫一扫

梦想CAD控件com接口界面控制右键弹出菜单


用户需要右键弹出菜单,则需要响应鼠标事件,右键按下后,弹出菜单分为在命令下运行及在非命令下运行,具体介绍如下(C#语言参考例子:"samples\CSharpRightKeyMenu\CSharpRightKeyMenu.sln") :

一、新建菜单文件

1、新一个文本文件: mxpoptest.mnu,内容如下(此文件为在命令下运行菜单):

​// 菜单条文件头说明.​

​// "文件类型字符串" "资源文件名" "透明颜色" "位置,可以是:top,left,bottom,right"​

​"MxDrawMenuBarFile"​​​ ​​"MxDraw.dll"​​​ ​​(214 211 206) ​​​​"top"​​​ ​​"弹出菜单2"​

 

​// 菜单内容说明​

​// "命令名称"  "命令" "图标索引字符串" "资源文件名" "命令提示字符串" "命令ID"  "ID类型"  "是否命令当着函数执行"​

​"POPMENUS"​​​ ​​"对象(&O)"​

​"确定"​​​ ​​""​​​ ​​""​​​ ​​""​​​ ​​"确定"​​​ ​​""​​​ ​​"ID_OK_BUTTON"​

​//"取消" "" "" "" "取消" "" "ID_CANCLE_BUTTON"​

​"关键字"​​​ ​​""​​​ ​​""​​​ ​​""​​​ ​​"关键字"​​​ ​​""​​​ ​​"ID_KEYWORD_BUTTON"​

​"SEPARATOR"​

​"Test(&E)"​​​ ​​"Test"​​​ ​​""​​​ ​​""​​​ ​​"编辑文字"​​​ ​​"55"​​​ ​​""​​​ ​​"Y"​

​"POPMENUE"​

此处的关键字为命令行提示命令。

2、新一个文本文件: MxPopMenuEnt.mnu,内容如下(此文件为在非命令下运行点击实体菜单):

​// 菜单条文件头说明.​

​// "文件类型字符串" "资源文件名" "透明颜色" "位置,可以是:top,left,bottom,right"​

​"MxDrawMenuBarFile"​​​ ​​"MxDraw.dll"​​​ ​​(214 211 206) ​​​​"top"​​​ ​​"弹出菜单2"​

 

​// 菜单内容说明​

​// "命令名称"  "命令" "图标索引字符串" "资源文件名" "命令提示字符串" "命令ID"  "ID类型" ​

​"POPMENUS"​​​ ​​"对象(&O)"​

​"删除(&E)"​​​     ​​"_Erase"​​​ ​​"IDB_ERASE_BITMAP"​

​"复制(&Y)"​​​     ​​"_Copy"​​​ ​​"IDB_COPY_BITMAP"​

​"移动(&V)"​​​     ​​"_Move"​​​ ​​"IDB_MOVE_BITMAP"​

​"旋转(&R)"​​​     ​​"_Rotation"​​​ ​​"IDB_ROTATION_BITMAP"​

​"缩放(&L)"​​​     ​​"_Scale"​​​ ​​"IDB_SCALE_BITMAP"​

​"SEPARATOR"​

​"对象特性(&O)"​​​ ​​"Mx_ShowProperties"​​​ ​​"IDB_PROPERTY_BITMAP"​​​ ​​"PropertyEditor.mrx"​

​"SEPARATOR"​

​"用户自加命令(&U)"​​​     ​​""​​​ ​​""​​​ ​​""​​​ ​​""​​​ ​​"99"​

​"POPMENUE"​

3、新一个文本文件: MxPopMenu.mnu,内容如下(此文件为在非命令下运行无实体右击菜单):

​// 菜单条文件头说明.​

​// "文件类型字符串" "资源文件名" "透明颜色" "位置,可以是:top,left,bottom,right"​

​"MxDrawMenuBarFile"​​​ ​​"MxDraw.dll"​​​ ​​(214 211 206) ​​​​"top"​​​ ​​"弹出菜单1"​

 

​// 菜单内容说明​

​// "命令名称"  "命令" "图标索引字符串" "资源文件名" "命令提示字符串" "命令ID"  "ID类型" ​

​"POPMENUS"​​​ ​​"弹出菜单1(&V)"​

​"新建(&N)"​​​ ​​"Mx_New"​​​ ​​"IDB_NEW_BITMAP"​​​ ​​"MxEdit.mrx"​​​ ​​""​​​ ​​""​​​ ​​"ID_NEW_BUTTOM"​

​"打开(&O)"​​​ ​​"Mx_OpenMxg"​​​ ​​"IDB_OPENMXG_BITMAP"​​​ ​​""​​​ ​​""​​​ ​​""​​​ ​​"ID_OPEN_BUTTOM"​

​"重画(&R)"​​​ ​​"Re"​​​ ​​"IDB_REGEN_BITMAP"​

​"SEPARATOR"​

​"实时缩放(&Z)"​​​ ​​"ZoomR"​​​ ​​"IDB_ZOOM_BITMAP"​

​"SEPARATOR"​

​"上一步"​​​ ​​"ZoomP"​​​ ​​"ID_PRVVIEW_BITMAP"​

​"窗口缩放(&W)"​​​ ​​"WindowZoom"​​​ ​​"IDB_ZOOMW_BITMAP"​

​"范围缩放(&E)"​​​ ​​"ZoomE"​​​ ​​"IDB_ZOOME_BITMAP"​

​"视区平移(&P)"​​​ ​​"P"​​​ ​​"IDB_PAN_BITMAP"​

​"视区旋转(&L)"​​​ ​​"Mx_Plan"​​​ ​​"IDB_PLAN_BITMAP"​​​ ​​"MxEdit.mrx"​

​"SEPARATOR"​

​"鸟瞰(&D)"​​​ ​​"DsViewer"​​​ ​​"IDB_DSVIEWER_BITMAP"​

​"放大镜(&M)"​​​ ​​"MagnifyingGlass"​​​ ​​"IDB_MAGNIFYINGCLASS_BITMAP"​

​"SEPARATOR"​

​"视区背景色(&C)"​​​ ​​"_ViewColor"​​​ ​​"IDB_VIEWCOLOR_BITMAP"​

​"线重(&S)"​​​ ​​"_ShowLineWeight"​​​ ​​"IDB_LINEWEIGHT_BITMAP"​

​"绘图模式(&A)"​​​ ​​"_DrawModle"​​​ ​​"IDB_DRAWMODLE_BITMAP"​

​"全屏显示(&F)"​​​ ​​"MxFullScreen"​​​ ​​"IDB_FULLSCREEN_BITMAP"​

​"SEPARATOR"​

​"用户坐标系(&U)"​​​ ​​"Mx_Ucs"​​​ ​​"IDB_UCS_BITMAP"​​​ ​​"MxEdit.mrx"​

 

​"POPMENUE"​

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开头的网络路径

​private void axMxDrawX1_MouseEvent(object sender, AxMxDrawXLib._DMxDrawXEvents_MouseEventEvent e)​

​{​

​if​​​ ​​(e.lType == 3)​

​{​

​// 右键按下​

​string sCmd = ​​​​""​​​  ​​;​

​if​​​ ​​(axMxDrawX1.IsRuningCommand(ref sCmd))​

​{​

​// 在命令下运行.​

​String sMenu = axMxDrawX1.GetOcxAppPath() + ​​​​"\\mxpoptest.mnu"​​​​;​

​axMxDrawX1.TrackPopupMenu(e.dX, e.dY, sMenu);​

​// 设置1,表示鼠标事件,不再往下传递.​

​axMxDrawX1.SetEventRet(1);​

 

​}​

​else​

​{​

​// 非命令下运行​

​MxDrawXLib.MxDrawResbuf filter = ​​​​new​​​ ​​MxDrawXLib.MxDrawResbuf();​

​MxDrawXLib.MxDrawEntity ent = (MxDrawXLib.MxDrawEntity)axMxDrawX1.FindEntAtPoint(e.dX, e.dY, filter);​

 

​String sPopMenu;​

​if​​​​(ent != ​​​​null​​​​)​

​{​

​axMxDrawX1.ClearCurrentSelect();​

​axMxDrawX1.AddCurrentSelect(ent.ObjectID,​​​​true​​​​,​​​​true​​​​);​

 

​sPopMenu = axMxDrawX1.GetOcxAppPath() + ​​​​"\\MxPopMenuEnt.mnu"​​​​;​

​}​

​else​

​{​

​sPopMenu = axMxDrawX1.GetOcxAppPath() + ​​​​"\\MxPopMenu.mnu"​​​​;​

​}​

 

 

​axMxDrawX1.TrackPopupMenu(e.dX, e.dY, sPopMenu);​

​// 设置1,表示鼠标事件,不再往下传递.​

​axMxDrawX1.SetEventRet(1);​

​}​

 

​}​

​}​

三、响应命令执行事件

如下:

​private void axMxDrawX1_ImplementCommandEvent(object sender, AxMxDrawXLib._DMxDrawXEvents_ImplementCommandEventEvent e)​

​{​

​if​​​​(e.iCommandId == 99)​

​{​

​MessageBox.Show(​​​​"用户定义命令执行...."​​​​);​

​}​

 

​}​

四、运行效果如下

1、当CAD控件视区无实体时用户右击效果:

梦想CAD控件com接口界面控制右键弹出菜单_文件名

2、当CAD控件视区有实体时用户右击实体效果:

梦想CAD控件com接口界面控制右键弹出菜单_字符串_02

3、当CAD控件在命令下运行时用户右击实体效果:

梦想CAD控件com接口界面控制右键弹出菜单_弹出菜单_03

4、用户定义命令执行效果:

梦想CAD控件com接口界面控制右键弹出菜单_弹出菜单_04

举报

相关推荐

0 条评论