LOGO
帮助文档
旧版文档
简介工具栏菜单栏标尺栏属性栏命令栏模型栏状态栏视区光标控制坐标图标浏览模式切换右键弹出菜单
简介

CAD控件界面上所有元素都可以控制显示或隐藏,点击此处下载演示实例。下面逐一介绍,控件界面上的元素位置如下图:


view.png

视频如下:

工具栏

显示或隐藏接口


显示或隐藏所有工具条:


COM接口ocx的属性, ShowToolBars


显示或隐藏指定工具条, 工具条名称会在后面的工具条文件格式中说明。


COM接口_DMxDrawX::ShowToolBar


_DMxDrawX::ShowToolBar


显示隐藏工具条,详细说明如下:


参数说明

BSTR pszToolBarName

工具条文字名

VARIANT_BOOL isShow

是否显示工具条


首先定义一个全局变量isShow,接下来的例子中会用到该变量,如下:


bool isShow = false;


控件界面工具栏的显示或隐藏,C#代码实现如下:


//隐藏/显示工具栏
private void HideToolbar()
{
    axMxDrawX1.ShowToolBar("常用工具", isShow);
    axMxDrawX1.ShowToolBar("绘图工具", isShow);
    axMxDrawX1.ShowToolBar("编辑工具", isShow);
    axMxDrawX1.ShowToolBar("特性", isShow);
    axMxDrawX1.ShowToolBar("ET工具", isShow);
 
    isShow = !isShow;
}


设计窗口时也可在属性栏中修改ShowToolBar的值,如下图所示:


toolbars.png


当值为True时,如下图:


showtoolbar.png


当值为False时,如下图:


hidetoolbar.png


隐藏或显示工具条上的按钮


主要用到函数说明:


_DMxDrawX::HideToolBarControl


隐藏或显示工具条上的按钮,成功返回TRUE。详细说明如下:


参数说明

BSTR pszToolBarName  

工具条名称

BSTR pszControlName

按钮名称,多个按钮名称,可以用逗号分隔开,为空,隐藏或显示所有按钮

VARIANT_BOOL isHide

是否隐藏按钮

VARIANT_BOOL isAutoRecalcLayout

是否自动重新布局窗口上的工具条


例如隐藏绘图工具栏上的绘线和绘矩形框按钮c#中实现代码说明:


 axMxDrawX1.HideToolBarControl("绘图工具","绘线,绘矩形框",true,true);


隐藏前:


hidebeforetoolbar.png


隐藏后:


hideaftertoolbar.png


MxDrawXCustomFunction::Mx_HideToolBarControl


隐藏或显示工具条上的按钮,成功返回TRUE。详细说明如下:


参数说明

IN LPCTSTR pszToolBarName

工具条名称

IN LPCTSTR pszControlName = NULL

按钮名称,多个按钮名称,可以用逗号分隔开,为空,隐藏或显示所有按钮

IN BOOL isHide = TRUE

是否隐藏按钮

IN BOOL isAutoRecalcLayout = TRUE

是否自动重新布局窗口上的工具条


例如隐藏常用工具栏上的保存,保存为mxg文件,另存为dwg文件按钮c#中实现代码说明:


MxDrawResbuf param = new MxDrawResbuf();
param.AddString("常用工具");
param.AddString("保存,保存为mxg文件,另存为dwg文件");
axMxDrawX1.CallEx("Mx_HideToolBarControl", param);


隐藏前:


hidebeforetoolbar1.png


隐藏后:


hideaftertoolbar1.png


禁用或激活控件工具条上的某个命令按钮


主要用到函数说明:


_DMxDrawX::EnableToolBarButton


禁用或激活控件工具条上的某个命令按钮。详细说明如下:


参数说明

BSTR pButtonName

工具条中的按钮名称

VARIANT_BOOL isEnable

是否禁用


例如页中禁用打开按钮代码:


 axMxDrawX1.EnableToolBarButton("打开dwg文件", false);


禁用前:


enabletoolbar1.png


禁用后:


enabletoolbar2.png


工具条文件

视频如下:


控件MxDraw52.dll所在目录下,所有的mxt都是工具条定义文件,每个mxt文件就是一个工具条, 如下:


文件名说明
MxDraw-ToolBar.mxt常用工具条
MxDraw-ToolBar-Draw.mxt绘图工具条
MxDraw-ToolBar-DrawParam.mxt特性工具条
MxDraw-ToolBar-Edit.mxt编辑工具条
MxDraw-ToolBar-ET.mxt扩展工具条


把不需要的工具条文件删除,控件加载时就不会显示该工具条。


它是文本文件,用记事本打开编辑,格式如下:


“//”是文件中的注释。


文件中第一行是工具条文件头信息,每列内容如下:


如:("MxDrawToolBarFile" "MxDraw.dll" (214 211 206) "top" "常用工具" "Y")


第几列例程中的内容说明
1"MxDrawToolBarFile"工具条文件标志字符串
2"MxDraw.dll"工具条中按钮图片资源加载文件 注:后面图标默认从该dll中加载
3"(214 211 206)"在资源文件中,按钮图片的透明色
4"top"位置,可以是:top,left,bottom,right
5"常用工具"工具条名称 注:显示\隐藏函数会使用
6"Y"是否可以浮动,Y \N


文件中后面每行代表一个工具条按钮。


每列的内容如下:


如:("打开网上dwg文件" "打开网上dwg文件" "_OpenWebDwg" "IDB_OPENWEBDWG_BITMAP" "" "" "" "Y")


命令名称命令提示字符串命令名控钮在资源文件中的位图IDID类型资源文件名命令ID没有命定义时,是否不要加载工具按钮
打开网上dwg文件打开网上dwg文件_OpenWebDwgIDB_OPENWEBDWG_BITMAP"""""""Y"


命令名称:


    "打开网上dwg文件"。


命令提示字符串:


    "打开网上dwg文件"。


命令名:


    COM接口:DMxDrawX::RegistUserCustomCommand注册命令


控钮在资源文件中的位图ID:


    " IDB_OPENWEBDWG_BITMAP "。


ID类型:


    目前控件内部使用,一般为空。


资源文件名:


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

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

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


命令ID:


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


没有命定义时,是否不要加载工具按钮:


    "Y"


自定义按钮参考例子:samples\AspNet\AspNet\My-MxDraw-ToolBar.txt。


比如:按钮图标从本地bmp文件加载:


("自定义打文件按钮" "自定义打文件按钮" "Mx_OpenMxg" "" "" "local:mytoolbar.bmp")


比如:按钮图标从服务器bmp文件加载,bmp文件与工具条文件在同一个服务器目录中:


("自定义打文件按钮" "自定义打文件按钮" "Mx_OpenMxg" "" "" "web:mytoolbar.bmp")


从指定文件加载


CAD控件默认是加载CAD控件程所在目录下的所有mxt文件,下面介绍如何显示指定加载工具文件。


COM接口: ToolBarFiles属性,它支持从服务器上加载工具文件,多个工具条文件用逗号隔开


帮助如下图:


iface1.png


显示加载工具条文件


CAD控件支持在需要时,再动态加载工具条文件,接口说明如下:


COM接口: _DMxDrawX::LoadToolBar


帮助文件抓图:


iface2.png


在工具条添加一个按钮


修改MxDraw52\Bin\vc100目录下的MxDraw-ToolBar.mxt文件:


L%XVY98]%IJ)ED~3~NWJS{N.png


// 如下,是从工具条所在本地目录的bmp加载,local:表示是个本地的bmp
("自定义打文件按钮" "自定义打文件按钮" "Mx_OpenMxg" "" "" "local:mytoolbar.bmp")
("自定义打文件按钮" "自定义打文件按钮" "Mx_OpenMxg" "" "" "local:mytoolbar.bmp")


改成:


// 如下,是从工具条所在网络目录的bmp加载,web:表示是网上加载
("自定义打文件按钮" "自定义打文件按钮" "Mx_OpenMxg" "" "" "web:mytoolbar.bmp")
("自定义打文件按钮" "自定义打文件按钮" "" "" "" "local:mytoolbar.bmp" "100")


效果如下,多了两个按钮了,用户可以给增加的按钮添加自定义命令。


toolbarb.png

菜单栏

CAD控件界面菜单栏的显示或隐藏,C#代码实现如下:


//隐藏/显示菜单栏
private void HideMenuBar()
{
    axMxDrawX1.ShowMenuBar = isShow;
    isShow = !isShow;
}


设计窗口时也可在属性栏中修改ShowMenuBar的值,如下图所示:


menubars.png


当值为True时,如下图:


showmenubar.png


当值为False时,如下图:


hidemenubar.png



显示或隐藏菜单项

COM接口 _DMxDrawX::HideMenuBarControl


主要用到函数说明:


_DMxDrawX::HideMenuBarControl


隐藏或显示工具条上的按钮,成功返回TRUE。详细说明如下:


参数 说明

VARIANT_BOOL isHide

是否隐藏按钮

sControlName

按钮名称,多个按钮名称,可以用逗号分隔开,为空,隐藏或显示所有按钮


例如隐藏菜单栏上的新建和打开按钮c#中实现代码说明:


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


隐藏前:


hidebeforemnub.png


隐藏后:


hideaftermnub.png


菜单栏文件


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


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


文件类型字符串 资源文件名(后面菜单的图标默认从该dll中加载) 图标的透明颜色 位置 菜单名 是否可以浮动,Y \N
"MxDrawMenuBarFile" "MxDraw.dll" (214 211 206) "top" "主菜单" "Y"


后面每列的内容如下:


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


命令名称:


    新建(&N)。


点击执行的命令:

    COM接口使用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类型:


    目前控件内部使用,一般为空。


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


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


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


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


从指定菜单文件加载


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


帮助如下图:


iface.png


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


COM接口,它是自定义函数 MxDrawXCustomFunction::Mx_ReLoadMenu


C#代码,如下调用:


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


在菜单栏添加一个按钮


1、新建菜单定义文件


新建一个文本文件将后缀名改为mnu(例如mxcad.mnu,此文件可以用记事本打开),文本里面的内容如下:


定义一个菜单按钮,按钮名为自定义新建,图标可以从服务器上加载(从服务器上加载写为web:mytoolbar.bmp),也可以从本地加载(从本地加载写为local:mytoolbar.bmp,本示例图标从本地上加载),图标名为mytoolbar.bmp,按钮点击执行命令,命令id为100。


// 菜单条文件头说明.
// "文件类型字符串" "资源文件名" "透明颜色" "位置,可以是:top,left,bottom,right" "是否可以浮动,Y \N "
"MxDrawMenuBarFile" "MxDraw.dll" (214 211 206) "top" "主菜单" "Y"

// 菜单内容说明
// "命令名称"  "命令" "图标索引字符串" "资源文件名" "命令提示字符串" "命令ID"  "ID类型" 
"POPMENUS" "文件(&F)"
"自定义新建(&N)1" "" "IDB_NEW_BITMAP" "local:mytoolbar.bmp"   "" "100" "ID_NEW_BUTTOM"
"自定义新建(&N)2" "" "IDB_NEW_BITMAP" "local:mytoolbar.bmp"   "" "100" "ID_NEW_BUTTOM"
"自定义新建(&N)3" "" "IDB_NEW_BITMAP" "local:mytoolbar.bmp"   "" "100" "ID_NEW_BUTTOM"
"新建(&N)" "Mx_New" "IDB_NEW_BITMAP" "MxEdit.mrx"  "" "" "ID_NEW_BUTTOM"
"打开(&O)" "Mx_OpenMxg" "IDB_OPENMXG_BITMAP" "" "" "" "ID_OPEN_BUTTOM"
"打开DWG文件(&M)" "OpenDwg" "IDB_OPENDWG_BITMAP" "" "" ""  "ID_OPENDWG_BUTTOM"
"SEPARATOR"
"最近文件(&X)" "Mc_Empty" "" "" "" "" "ID_FILE_MRU_FILE1"
"SEPARATOR"
"退出(&X)" "Mc_Empty" "" "" "" "" "ID_APP_EXIT"
"POPMENUE"


    “//”是文件中的注释

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

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

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


将图标文件mytoolbar.bmp和菜单定义文件mxcad.mnu放到MxDraw52\Bin\vc100目录下。


L%XVY98]%IJ)ED~3~NWJS{N.png


2、若需要图标从服务器上面加载,需要把图标文件和菜单定义文件上传到服务器

标尺栏

显示或隐藏接口:


COM接口: DMxDrawX::ShowRulerWindow


CAD控件界面标尺栏的显示或隐藏,C#代码实现如下:


//隐藏/显示标尺栏
private void HideRulerWindow()
{
    axMxDrawX1.ShowRulerWindow = isShow;
    isShow = !isShow;
}


设计窗口时也可在属性栏中修改ShowRulerWindow的值,如下图所示:


rulerbars.png


当值为True时,如下图:


showrulerbar.png


当值为False时,如下图:


hiderulerbar.png

属性栏

显示或隐藏接口:


COM接口: DMxDrawX::ShowPropertyWindow


属性栏功能,默认是没有启用的,需要在控件启动时初始化启用。


COM: IniSet="EnablePropertyWindow=Y"如下图说明:


sm.png


CAD控件界面属性栏的显示或隐藏,C#代码实现如下:


//隐藏/显示属性栏
private void HidePropertyWindow()
{
    axMxDrawX1.ShowPropertyWindow = isShow;
    isShow = !isShow;
}


设计窗口时也可在属性栏中修改ShowPropertyWindow的值,如下图所示:


property.png


当值为True时,如下图:


showproperty.png


当值为False时,如下图:


hideproperty.png

命令栏

显示或隐藏接口:


COM接口_DMxDrawX::ShowCommandWindow


CAD控件界面命令栏的显示或隐藏,C#代码实现如下:


private void HideCommandWindow()
{
    axMxDrawX1.ShowCommandWindow = isShow;
    isShow = !isShow;
}


设计窗口时也可在属性栏中修改ShowCommandWindow的值,如下图所示:


commd.png


当值为True时,如下图:


showcommd.png


当值为False时,如下图:


hidecommd.png

模型栏

显示或隐藏接口:


COM接口_DMxDrawX::ShowModelBar


CAD控件界面模型栏的显示或隐藏,C#代码实现如下:


private void HideModelBar()
{
    axMxDrawX1.ShowModelBar = isShow;
    isShow = !isShow;
}


设计窗口时也可在属性栏中修改ShowModelBar的值,如下图所示:


model.png


当值为True时,如下图:


showmodel.png


当值为False时,如下图:


hidemodel.png

状态栏

显示或隐藏接口:


COM接口_DMxDrawX::ShowStatusBar


显示进度条


COM接口:


设置进度条显示范围_DMxDrawX::SetStatusBarProgressMeter
设置进度条显示位置_DMxDrawX::SetStatusBarProgressMeterPos
隐藏进度条DMxDrawX::RestoreStatusBar


状态栏上按钮调用


参考“ 梦想控件20-常用系统变量说明.doc ”文档,状态栏上的捕捉,正交等功能如何在自己的程序中设置。


坐标设置事件


状态上的坐标被修改后,会触发一个通知事件,可以帮助用户写自定义状态栏。


COM接口DMxDrawXEvents::SetTipCoord


_DMxDrawXEvents::SetTipCoord方法


接口:


static void SetTipCoord(CString sCoordTxt, double dX, double dY, double dZ);


参数:


参数说明

CString sCoordTxt

状态条显示内容

double dX

状态条显示X坐标

double dY

状态条显示Y坐标

double dZ

状态条显示Z坐标


进度条事件


进度条显示时,会触发设置进度条事件。


COM接口DMxDrawXEvents::SetProgressBar


状态栏的梦想Logo


CAD控件试用版本程序,总是会显示该Logo,正式程序就会自动去掉该Logo。


CAD控件界面状态栏的显示或隐藏,C#代码实现如下:


private void HideStatusBar()
{
    axMxDrawX1.ShowStatusBar = isShow;
    isShow = !isShow;
}


设计窗口时也可在属性栏中修改ShowStatusBar的值,如下图所示:


stu.png


当值为True时,如下图:


showstu.png


当值为False时,如下图:


hidestu.png

视区

设置视区背景色


COM接口_DMxDrawX::ViewColor


例如C#动态修改颜色:


 axMxDrawX1.ViewColor = Color.FromArgb(255,255,66,0)


设置视区背景色为渐变色


COM接口IniSet="ViewGradientColor=RGB;标记"


设置背景为渐变色填充,RGB是填充的渐变色,标记为 0,不使用渐变填充颜色,1使用渐变填充颜色。


C#如使用绿色渐变:


axMxDrawX1.Iniset = "ViewGradientColor=" + "255" + ";1";
axMxDrawX1.ViewColor = Color.FromArgb(10, 22, 200, 0);


设置水印背景


COM接口_DMxDrawX::Watermark


例如:设置文件名:d:\\mxcad.jpg,透明度为70,居中显示,x方向距离为5,y方向距离为5,如下:


ocx.Watermark = "d:\\mxcad.jpg,70,5,5,1"


绘光栅图到背景


COM接口_DMxDrawX::DrawImageToBackground


参考说明如下:


BSTR sFileName光栅图文件.DWGBMPJPG文件路径
LONG lLeftUpX栅图显示的在控件视区显示的左上角位置X,视区窗口坐标
LONG lLeftUpY栅图显示的在控件视区显示的左上角位置Y,视区窗口坐标


把DWG文件当着背景导入


COM接口_DMxDrawX::OpenBackgroundFile


把一个dwg文件,或者图像文件当着一个背景导入,参考说明如下:


VARIANT_BOOL isGreyness是否灰显示
LONG lightColor背景灰度显示颜色
VARIANT_BOOL isZoomE  是否自动把调用ZoomE操作
VARIANT_BOOL isUpDisplay是否自动调用更新显示
sFileDWGBMPJPG文件路径


对象夹点显示颜色


COM接口IniSet="GripColor=RGB"
光标控制

设置光标线显示长度:


COM接口_DMxDrawX::CursorLong
_DMxDrawX::SetCursorCrossLong


    设置为0表示无限长:CursorLong= 0,默认值为30。


设置光标矩形框大小:


COM接口_DMxDrawX::CursorWidth
_DMxDrawX::SetCursorPickRect


    默认值为6 ,单位是屏幕像素大小。


自定义设置光标


COM接口,临时需要改变光标,用如下函数完成:


保存光标状态,与RestoreCursor配合使用_DMxDrawX::SaveCursor
设置光标,从cur光标文件加载_DMxDrawX::SetCursor
恢复光标_DMxDrawX::RestoreCursor


设置默认缺省时光标


COM接口_DMxDrawX::UseArrowCursor


从文件加载一个默认光标,控件默认状态下将使用这个光标,路径是个相对 MxDrawX.ocx 所在目录下的文件。


Iniset属性,DEFAULTCURSOR=MyCursor.cur。


光标位置


得到位置,文档坐标,是个MxDrawPoint对象。


COM接口_DMxDrawX::GetInputCursorPos


设置光标位置,文档坐标。


COM接口_DMxDrawX::SetInputCursorPos
坐标图标

显示或隐藏接口:


COM接口DMxDrawX::IsDrawCoord
浏览模式切换

启用接口:


COM接口DMxDrawX::BrowseMode


CAD控件界面浏览模式切换,C#代码实现如下:


private void BrownerMode()
{
    isShow = !isShow;
    axMxDrawX1.BrowseMode = isShow;
    axMxDrawX1.ShowMenuBar = !isShow;
    axMxDrawX1.ShowPropertyWindow = !isShow;
}


设计窗口时也可在属性栏中修改相对应的值,如下图所示:


bro.png


切换前如下图:


showbro.png


切换后如下图所示:


hidebro.png

右键弹出菜单

用户需要右键弹出菜单,则需要响应鼠标事件,右键按下后,弹出菜单分为在命令下运行及在非命令下运行,具体介绍如下(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"


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


新一个文本文件: 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"


新一个文本文件: 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"


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


文件类型字符串资源文件名(后面菜单的图标默认从该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开头的网络路径


        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、响应命令执行事件,如下:


 private void axMxDrawX1_ImplementCommandEvent(object sender, AxMxDrawXLib._DMxDrawXEvents_ImplementCommandEventEvent e)
        {
            if(e.iCommandId == 99)
            {
                MessageBox.Show("用户定义命令执行....");
            }
            
         }


4、运行效果如下:


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


youji1.png


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


youji2w.png


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


youjian3.png


用户定义命令执行效果:


youjian4.png