0
点赞
收藏
分享

微信扫一扫

梦想CAD控件网页版右键弹出菜单


用户需要右键弹出菜单,则需要响应鼠标事件,右键按下后,弹出菜单分为在命令下运行及在非命令下运行,具体介绍如下 :

一、新建菜单文件

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)。

点击执行的命令:其它语言使用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,如不为空,可以在控件的命令执行事件中响应菜单点击事件: ImplementCommandEvent。

ID类型:目前控件内部使用,一般为空。

二、响应鼠标右键事件,弹出菜单

主要用到函数说明:_DMxDrawX::TrackPopupMenu

在指定位置弹出一个菜单。详细说明如下:

参数

说明

DOUBLE dX

弹出菜单的位置X值,是文档坐标

DOUBLE dY

弹出菜单的位置Y值,是文档坐标

sMenuFile

菜单定义文件,支持http开头的网络路径

if​​​​(lType == 3)​​
​​{​​
​​// 右键按下​​
​​var​​​ ​​ret = mxOcx.Call(​​​​"Mx_IsRuningCommand"​​​​, ​​​​""​​​​);​​
​​var​​​ ​​sStatuIsOK = ret.AtString(0);​​
​​var​​​ ​​sStatuIsintellisel = ret.AtString(1);​​
​​if​​​ ​​((sStatuIsOK == ​​​​"Ok"​​​​) && (sStatuIsintellisel != ​​​​"intellisel"​​​​)){​​
​​// 在命令下运行.​​
​​var​​​ ​​sMenu = mxOcx.GetOcxAppPath() + ​​​​"\\mxpoptest.mnu"​​​​;​​
​​mxOcx.TrackPopupMenu(dX, dY, sMenu);​​
​​// 设置1,表示鼠标事件,不再往下传递.​​
​​mxOcx.SetEventRet(1);​​
​​return​​​​;​​
​​}​​
​​else​​
​​{​​
​​// 非命令下运行​​
​​var​​​ ​​filter = mxOcx.NewResbuf();​​
​​var​​​ ​​ent = mxOcx.FindEntAtPoint(dX, dY, filter);​​
​​var​​​ ​​sPopMenu;​​
​​if​​​​(ent != ​​​​null​​​​)​​
​​{​​
​​mxOcx.ClearCurrentSelect();​​
​​mxOcx.AddCurrentSelect(ent.ObjectID,​​​​true​​​​,​​​​true​​​​);​​

​​sPopMenu = mxOcx.GetOcxAppPath() + ​​​​"\\MxPopMenuEnt.mnu"​​
​​}​​
​​else​​
​​{​​
​​sPopMenu = mxOcx.GetOcxAppPath() + ​​​​"\\MxPopMenu.mnu"​​
​​}​​


​​mxOcx.TrackPopupMenu(dX, dY, sPopMenu);​​
​​// 设置1,表示鼠标事件,不再往下传递.​​
​​mxOcx.SetEventRet(1);​​
​​}​​
​​}​​

三、响应命令执行事件

如下:

function​​​ ​​DoCommandEventFunc(iCmd)​​
​​{​​
​​if​​​ ​​(iCmd == 55) {​​

​​alert(​​​​"菜单按钮点击"​​​​);​​
​​}​​
​​}​​

四、运行效果如下

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

梦想CAD控件网页版右键弹出菜单_字符串

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

梦想CAD控件网页版右键弹出菜单_文件名_02

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

梦想CAD控件网页版右键弹出菜单_文件名_03

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

梦想CAD控件网页版右键弹出菜单_字符串_04

举报

相关推荐

0 条评论