当前位置:首页 > 帮助文档 > COM开发 > 界面控制
简介工具栏菜单栏标尺栏属性栏命令栏模型栏状态栏浏览模式切换右键弹出菜单
简介

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


view.png

工具栏

首先定义一个全局变量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


隐藏后:


hideaftertoolbar.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")


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



在工具条添加一个按钮


修改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

菜单栏

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


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


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


menubars.png


当值为True时,如下图:


showmenubar.png


当值为False时,如下图:


hidemenubar.png


主要用到函数说明:


_DMxDrawX::HideMenuBarControl


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


参数 说明

VARIANT_BOOL isHide

是否隐藏按钮

sControlName

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


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


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


隐藏前:


hidebeforemnub.png


隐藏后:


hideaftermnub.png

标尺栏

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


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


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


rulerbars.png


当值为True时,如下图:


showrulerbar.png


当值为False时,如下图:


hiderulerbar.png

属性栏

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


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


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


property.png


当值为True时,如下图:


showproperty.png


当值为False时,如下图:


hideproperty.png

命令栏

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


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


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


commd.png


当值为True时,如下图:


showcommd.png


当值为False时,如下图:


hidecommd.png

模型栏

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


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


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


model.png


当值为True时,如下图:


showmodel.png


当值为False时,如下图:


hidemodel.png

状态栏

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


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


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


stu.png


当值为True时,如下图:


showstu.png


当值为False时,如下图:


hidestu.png

浏览模式切换

控件界面浏览模式切换,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,如不为空,可以在控件的命令执行事件中响应菜单点击事件: ImplementCommandEvent。


ID类型:


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


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

梦想CAD是专业的CAD插件(控件),可轻松在网页、手机及BS/CS程序中浏览编辑DWG文件,不需安装AutoCAD即可运行。经十余年累积已非常稳定可靠,有关键的空间搜索算法,并使用汇编优化,可同时处理50万级实体,有非常高的图形显示和处理效率。
联系我们
技术TEL:400-888-5703
185-8173-1060
客服I QQ: 3570505660
技术I QQ: 827867134
技术II QQ:6884123
VIP服务购买
销售TEL:156-8136-8971
销售QQ:710714273
用户交流
控件QQ交流群1:73281982
控件QQ交流群2:112199959
MxCAD软件群 1:515771658
技术I:QQ
827867134
客服I:QQ
3570505660
销售QQ
710714273
联系电话400-888-5703