CAD菜单栏

本文介绍了MxDraw控件菜单的相关操作,包括显示或隐藏接口、菜单栏文件格式、从指定菜单文件加载、重新加载菜单接口、禁用或启用菜单项、显示或隐藏菜单项等。还给出了完整例子,说明在B/S模式下如何自定义菜单并响应点击事件,以及支持鼠标右键弹出菜单的方法。

一、显示或隐藏接口

1、C++接口: MxDraw::ShowMenuBar

2、COM接口: ocx的属性, ShowModelBar。例如JS语言,隐藏菜单栏:

1

<param name="ShowMenuBar" value="0">

二、菜单栏文件

控件MxDraw52.dll所在目录下,所有的mnu文件,都是菜单定义文件,它是文本文件,用记事本打开编辑,格式如下:

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

文件类型字符串

资源文件名(后面菜单的图标默认从该dll中加载)

图标的透明颜色位置菜单名是否可以浮动,Y \N
"MxDrawMenuBarFile""MxDraw.dll"(214 211 206)"top""主菜单""Y"

“//”是文件中的注释

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

"POPMENUS" "文件(&F)",表示一个弹出菜单开始

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

2、后面每列的内容如下:

命令名称点击执行的命令图标索引字符串资源文件名命令提示字符串"命令ID"ID类型(目前控件内部使用,一般为空)
"新建(&N)"Mx_New"IDB_NEW_BITMAP""""""1"""

(1)命令名称:新建(&N)。

(2)点击执行的命令:C++使用acedRegCmds->addCommand注册命令。其它语言使用DMxDrawX::RegistUserCustomCommand注册命令。

(3)图标索引字符串:IDB_NEW_BITMAP。

(4)资源文件名:

①为空取默认资源文件名,该名称需要去掉控件版本号如:MxDraw52.dll写成MxDraw.dll,控件会根据具体情况加上这个版本号。

②资源文件如是local:开头,表示是一个本地bmp文件,如:取mytoolbar.bmp做工具按钮图标:local:mytoolbar.bmp

    比如:菜单图标从本地bmp文件加载:

   "自定义新建(&N)" "Mx_New" "IDB_NEW_BITMAP" "local:mytoolbar.bmp"

③资源文件如是web:开头,表示是一个网络服务器上的bmp文件,如:取mytoolbar.bmp做工具按钮图标: web:mytoolbar.bmp

    比如:菜单图标从服务器bmp文件加载,bmp文件与菜单文件在同一个服务器目录中:

   "自定义新建(&N)" "Mx_New" "IDB_NEW_BITMAP" "web:mytoolbar.bmp"

(5)命令提示字符串:为空。

(6)命令ID:指定菜单点击后响应的命令事件id,如不为空,可以在控件的命令执行事件中响应菜单点击事件: ImplementCommandEvent。

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

比如:菜单图标从本地bmp文件加载:

1

"自定义新建(&N)" "Mx_New" "IDB_NEW_BITMAP" "local:mytoolbar.bmp"

比如:菜单图标从服务器bmp文件加载,bmp文件与菜单文件在同一个服务器目录中:

1

"自定义新建(&N)" "Mx_New" "IDB_NEW_BITMAP" "web:mytoolbar.bmp"

三、从指定菜单文件加载

1、C++接口: MXDRAWOCXHANDLE MxDraw::CreateMxDraw第五个参数表示菜单加载文件

2、COM接口: Iniset属性,MenuFile=mymenu.mun,它支持从服务器上加载菜单文件

帮助如下图:

iface.png

 

如Js语言从服务器加载菜单,菜单文件相对于当前网页:

1

<param name="Iniset" value="MenuFile=./mymenu.mun">

相对服务器路径, "~"开头,如下:

1

<param name="Iniset" value="MenuFile=~/mymenu.mun">

四、重新从文件加载菜单接口:

C++MxDraw::ReLoadMenu
COM接口,它是自定义函数:MxDrawXCustomFunction::Mx_ReLoadMenu

C#代码,如下调用:

1

axMxDrawX1.Call("Mx_ReLoadMenu""mxcad.mnu");

五、禁用或启用菜单项

C++接口函数:MxDraw::EnableMenuBarControl

MxDraw::EnableMenuBarControl方法

激活或禁用菜单项奖条上的按钮,说明如下:

参数说明
MXDRAWOCXHANDLE hOcx

控件窗口句柄

LPCTSTR pszControlName

按钮的名称,在工具条定义文件(扩展名为mxt)第一列就是按钮名称

BOOL isEnable = TRUE

是否激活,传false禁用工具

六、显示或隐藏菜单项

C++接口MxDraw:: HideMenuBarControl
COM接口_DMxDrawX::HideMenuBarControl

例如:

1

mxOcx.HideMenuBarControl("新建(&N),打开(&O)",true);

JS代码:

1

2

3

4

5

6

7

8

9

10

11

function InitMxDrawX() {

    if (mxOcx) {

        if (!mxOcx.IsIniting()) 

        {

            clearInterval(mxtime);

            // 控件初始化完成,需要在启动做的事,在这里做

 

mxOcx.HideMenuBarControl("新建(&N),打开(&O)",true);

        }

    }

}}

七、完整例子说明

在B/S模式下,一步一步的说一下,如何用户自定义菜单,并响应点击事件。 详细例子可以参考samples\AspNet\AspNet.sln。

1、新建菜单文件

(1)新一个文本文件: mxcad.mnu,内容如下:

(2)定一个菜单按钮,按钮名为MyMenuButtonName,图标从服务器上加载,图标名为mytoolbar.bmp,按钮点击执行命令,命令id为99。

1

2

3

4

"MxDrawMenuBarFile" "MxDraw.dll" (214 211 206) "top" "主菜单" "Y"

"POPMENUS" "文件(&F)"

"MyMenuButtonName(&N)"  ""  ""  "web:mytoolbar.bmp"  "" "99"

"POPMENUE"

2、把文件上传到服务器

把mxcad.mnu, mytoolbar.bmp文件放到服务器上,并放在同一个目录下,保证能直接从ie中访问。

3、Js程序里引用菜单

菜单文件放在当前网页目录下。

1

<param name="Iniset" value="MenuFile=./mxcad.mnu">

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

1

2

3

4

5

6

7

function DoCommandEventFunc(iCmd)

{

    if (iCmd == 99) {

        //该函数在mxcustom.js中 

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

}

}

1

document.getElementById("MxDrawXCtrl").ImplementCommandEventFun = DoCommandEventFunc;

八、右键弹出菜单

控件支持鼠标右键弹出菜单,菜单的文件格式和前面的主菜单文件格式一样。 详细参考例子,samples\ie\iedemoTest.htm。

弹出函数C++接口MxDraw::TrackPopupMenu
COM接口DMxDrawX::TrackPopupMenu

在B/S模式下,下面一步一步的说明如何支持该功能:

1、新建菜单文件

(1)新一个文本文件: mxpop.mnu,内容如下:

(2)定一个菜单按钮,按钮名为MyMenuButtonName,图标是服务器上加载,图标名为mytoolbar.bmp,按钮点击执行命令,命令id为99。

1

2

3

4

"MxDrawMenuBarFile" "MxDraw.dll" (214 211 206) "top" "主菜单" "Y"

"POPMENUS" "文件(&F)"

"MyMenuButtonName(&N)"  ""  ""  "web:mytoolbar.bmp"  "" "99"

"POPMENUE"

2、把文件上传到服务器

把mxpop.meu, mytoolbar.bmp文件放到服务器上,并放在同一个目录下,保证能直接从ie中访问。

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

菜单文件放在当前网页目录下。

1

document.getElementById("MxDrawXCtrl").ImplementMouseEventFun = MouseEvent;

1

2

3

4

5

6

7

8

9

10

function MouseEvent(dX, dY, lType) {

// 3表示鼠标右键按下   

 if(lType == 3)

{

        var  sPopMenu = mxOcx.GetOcxAppPath() + ".\\mxpop.mnu"

        mxOcx.TrackPopupMenu(dX, dY, sPopMenu);

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

        mxOcx.SetEventRet(1);

}

}

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

1

2

3

4

5

6

7

function DoCommandEventFunc(iCmd)

{

    if (iCmd == 99) {

        //该函数在mxcustom.js中 

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

}

}

1

document.getElementById("MxDrawXCtrl").ImplementCommandEventFun = DoCommandEventFunc;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值