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

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

 

1、新建菜单文件

 

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

 

1

2

3

4

5

6

7

8

9

10

11

12

13

// 菜单条文件头说明.

// "文件类型字符串" "资源文件名" "透明颜色" "位置,可以是: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"

 

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

 

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

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// 菜单条文件头说明.

// "文件类型字符串" "资源文件名" "透明颜色" "位置,可以是: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"

 

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

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

// 菜单条文件头说明.

// "文件类型字符串" "资源文件名" "透明颜色" "位置,可以是: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"

 

文件中第一行是菜单文件头,每列内容如下 :

 

文件类型字符串 资源文件名(后面菜单的图标默认从该dll中加载) 图标的透明颜色 位置 菜单名
"MxDrawMenuBarFile" "MxDraw.dll" (214 211 206) "top" "弹出菜单"

 

“//”是文件中的注释

文件中后面每行代表一个菜单项

"POPMENUS" "对象(&O)",表示一个弹出菜单开始

"POPMENUE" 表示弹出菜单的结束

"SEPARATOR" 表示弹出菜单的分割线

 

后面每列的内容如下:

 

命令名称 点击执行的命令 图标索引字符串 资源文件名 命令提示字符串 "命令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、响应鼠标右键事件,弹出菜单

 

主要用到函数说明:

 

_DMxDrawX::TrackPopupMenu

 

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

 

参数 说明

DOUBLE dX

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

DOUBLE dY

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

sMenuFile

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

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

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

                }

 

            }

        }

 

3、响应命令执行事件,如下:

 

1

2

3

4

5

6

7

8

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

        {

            if(e.iCommandId == 99)

            {

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

            }

             

         }

 

4、运行效果如下:

 

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

 

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

 

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

 

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

 

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

 

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

 

用户定义命令执行效果:

 

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