说明工具栏菜单栏标尺栏属性栏命令栏模型栏状态栏视区光标控制坐标图标浏览模式动态提示向控件工具增加一个自已的按钮步骤
说明

控件界面上所有元素都可以控制显示或隐藏,下面逐一介绍,控件界面上的元素位置如下图:


view.png

工具栏

显示或隐藏接口


显示或隐藏所有工具条:


C++ MxDraw::ShowToolBars
COM接口 ocx的属性, ShowToolBars


例如JS语言隐藏工具条:


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


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


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


MxDraw::ShowToolBar 方法


接口:


static BOOL ShowToolBar(IN MXDRAWOCXHANDLE hOcx, IN const CString& sToolBarName, BOOL isShow);


参数:


参数 说明
IN MXDRAWOCXHANDLE hOcx

控件句柄  

IN const CString& sToolBarName  

工具条名,在工具条定义文件(扩展名为mxt)中的第一行第五列

BOOL isShow

为TRUE显示工具条,否则隐藏工具条


显示或隐藏工具条上某个按钮


C++ MxDraw::HideToolBarControl


例如VC代码隐藏绘图工具栏上的绘线和绘矩形框按钮:


MxDraw::HideToolBarControl(m_hDrawOcx,_T("绘图工具"),_T("绘线,绘矩形框"));


COM接口 _DMxDrawX::HideToolBarControl


例如VC代码隐藏绘图工具栏上的绘线和绘矩形框按钮:


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


禁用工具条上某个按钮


C++接口 MxDraw::EnableToolBarControl


例如禁用打印按钮:


MxDraw::EnableToolBarControl(m_hDrawOcx,_T("打印图形"),FALSE);


COM接口 DMxDrawX::EnableToolBarButton


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


document.getElementById("MxDrawOcxCtrl").EnableToolBarButton("打开dwg文件",0);


工具条文件


控件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"


命令名称:


    "打开网上dwg文件"。


命令提示字符串:


    "打开网上dwg文件"。


命令名:


    C++使用McEdCommandStack :: addCommand增加,例如下:

    acedRegCmds()->addCommand(_T("SysCmd"),

    _T("OpenDwg"), _T("OpenDwg"), 1, OpenDwg);

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


从指定文件加载


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


C++接口: MXDRAWOCXHANDLE MxDraw::CreateMxDraw第四个参数指定工具条加载文件

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


帮助如下图:


iface1.png


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


<param name=" ToolBarFiles" 
value=" ./My-MxDraw-ToolBar.txt,MxDraw-ToolBar-DrawParam.mxt,MxDraw-ToolBar-Draw.mxt,MxDraw-ToolBar-Edit.mxt">


暂不加载工具条文件,如下:


<param name=" ToolBarFiles " value=" Empty.mxt">


显示加载工具条文件


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


C++接口: MxDraw::LoadToolBar


例如:


void CTestDlg::OnBnClickedLoadtoolbarButton1()
    {
        CFileDialog openDlg(TRUE,_T("mxt"),NULL,
            OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
            _T("mxt(*.mxt) | *.mxt||"),AfxGetApp()->GetMainWnd());
        if(openDlg.DoModal() == IDOK)
        {
            CString sToolBarFilePath = openDlg.GetPathName();
            MxDraw::LoadToolBar(m_hDrawOcx,sToolBarFilePath);
        }
}


COM接口: _DMxDrawX::LoadToolBar


帮助文件抓图:


iface2.png


完整例子说明


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


1、新建菜单文件


新一个文本文件: My-MxDraw-ToolBar.txt,内容如下:


定一个按钮,按钮名为“自定义按钮“,图标是服务器上加载,图标名为mytoolbar.bmp,按钮点击执行命令,命令id为99。


("MxDrawToolBarFile" "MxDraw.dll" (214 211 206) "top" "MyTest工具" "Y")
("自定义按钮" "自定义按钮" "" "" "" " web:mytoolbar.bmp " "100")


2、把文件上传到服务器


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


3、Js程序里引用工具条


工具条文件放在当前网页目录下。


<param name="ToolBarFiles" value="./ My-MxDraw-ToolBar.txt ">


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


function DoCommandEventFunc(iCmd)
{
    if (iCmd == 100) {
        //该函数在mxcustom.js中 
        alert("工具条按钮点击");
}
}


document.getElementById("MxDrawXCtrl").ImplementCommandEventFun = DoCommandEventFunc;
菜单栏

显示或隐藏接口


C++接口: MxDraw::ShowMenuBar

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


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


菜单栏文件


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


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


文件类型字符串

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

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


    “//”是文件中的注释

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

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

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


后面每列的内容如下:


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


命令名称:


    新建(&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类型:


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


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


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


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


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


从指定菜单文件加载


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

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


帮助如下图:


iface.png


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


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


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


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


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


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


C#代码,如下调用:


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


例如:


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


JS代码:


function InitMxDrawX() {
    if (mxOcx) {
        if (!mxOcx.IsIniting()) 
        {
            clearInterval(mxtime);
            // 控件初始化完成,需要在启动做的事,在这里做

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


完整例子说明


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


1、新建菜单文件


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


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


"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程序里引用菜单


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


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


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


function DoCommandEventFunc(iCmd)
{
    if (iCmd == 99) {
        //该函数在mxcustom.js中 
        alert("菜单按钮点击");
}
}


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


右键弹出菜单


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


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


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


1、新建菜单文件


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


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


"MxDrawMenuBarFile" "MxDraw.dll" (214 211 206) "top" "主菜单" "Y"
"POPMENUS" "文件(&F)"
"MyMenuButtonName(&N)"  ""  ""  "web:mytoolbar.bmp"  "" "99"
"POPMENUE"


2、把文件上传到服务器


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


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


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


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


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


function DoCommandEventFunc(iCmd)
{
    if (iCmd == 99) {
        //该函数在mxcustom.js中 
        alert("菜单按钮点击");
}
}


document.getElementById("MxDrawXCtrl").ImplementCommandEventFun = DoCommandEventFunc;
标尺栏

显示或隐藏接口:


C++: MxDraw::ShowRulerWindow

COM接口: DMxDrawX::ShowRulerWindow


例如隐藏标尺栏,JS:


<param name="ShowRulerWindow" value="0">
属性栏

显示或隐藏接口:


C++: MxDraw::ShowPropertyEditWindow

COM接口: DMxDrawX::ShowPropertyWindow


例如显示属性栏,JS:


<param name="ShowPropertyWindow" value="1">


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


C++: MxDraw::EnablePropertyEditWindow


例如,在App::InitInstance中启用


BOOL CTestDlgApp::InitInstance()
{
 
// …
MxDraw::InitMxDraw(true,_T("MxDraw-Edit.ini"));
MxDraw::SetTheme(MxDraw::themeWhidbey);
MxDraw::EnableUndo(true);
MxDraw::EnableOleShow(true);
MxDraw::EnableViewModifyNotify(true);
MxDraw::EnableDeskCommandWindow(true);
MxDraw::ShowCommandWindow(NULL,TRUE);
 
MxDraw::EnablePropertyEditWindow(true);
//…
}


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


sm.png


例如,Js调用启用属性窗口功能,但不显示。


<param name="Iniset" value="LoadMrx=PropertyEditor,EnablePropertyWindow=Y">
命令栏

显示或隐藏接口:


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


例如隐藏命令栏,JS:


<param name="ShowCommandWindow" value="0">
模型栏

显示或隐藏接口:


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


例如隐藏模型栏,JS:


<param name="ShowModelBar" value="0">
状态栏

显示或隐藏接口:


C++MxDraw::ShowModelBar
COM接口 _DMxDrawX::ShowStatusBar


例如隐藏状态栏,JS:


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


显示进度条


COM接口:


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


C++接口:


设置进度条显示范围Mx::mcedSetStatusBarProgressMeter
设置进度条显示位置 Mx::mcedSetStatusBarProgressMeterPos
设置进度条走一步 Mx::mcedSetStatusBarProgressStep
隐藏进度条 Mx::mcedRestoreStatusBar


状态栏上按钮调用


参考“梦想控件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


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

视区

设置视区背景色


COM接口_DMxDrawX::ViewColor
C++MxDraw::SetViewColor


例如C#动态修改颜色:


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


例如JS把背景色变成红色= 123,绿色=55,蓝色=78,颜色值是由(0xFF FF FF)6位的16进制数据组成,分别代表示(0x红,绿,蓝),比如要设置颜色: 红色= 123,绿色=55,蓝色=78的颜色。


123= 0x7B, 55=0x37, 78=0x4E


也就是0x7B 37 4E, 0x7B374E = 8075086


所以设置ViewColor =8075086


 <param name="ViewColor" value="8075086">


设置视区背景色为渐变色


COM接口IniSet="ViewGradientColor=RGB;标记"
C++ MxDraw::SetViewGradientColor


设置背景为渐变色填充,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"


JS例子:


var iShowWatermark = false;
function ShowWatermark() {
    iShowWatermark = !iShowWatermark;
    if (iShowWatermark) {
        mxOcx.Watermark = mxOcx.GetOcxAppPath() + "\\Watermark.png" + ",20,5,5,1";
        mxOcx.ViewColor = 16777215; // 背景色改成白色
    }
    else {
        mxOcx.Watermark = "";
        mxOcx.ViewColor = 0; // 背景色改成白色
    }
}


C++MxDraw::OpenBackgroundImageFile


参考说明如下:


// Summary:
//   把一个光栅图打开,做背景.
// Parameters:
//   hOcx            - 控件句柄
//  luPt             -    光栅图显示的在控件视区显示的左上角位置,视区窗口坐标。
//在居中显示时,luPt.x表示左右空白距离,luPt.y表示上下空白距离
//  pszFile-    DWG\BMP\JPG文件路径,支持http路径,文件件名为空时,清空背景文件
//  iTransparen        - 表示透明显示的,透明度,取值在 0~100,
//  pos                - 背景图片是否居中显示,还是左上角定位
// Returns:
//   成功能返回true
// -------------------------------------------------------------------------
static BOOL OpenBackgroundImageFile(IN MXDRAWOCXHANDLE hOcx,
IN CPoint luPt,IN LPCTSTR pszFile,IN int iTransparen = 50,
IN MxDraw::ImagePos pos = kAutoCenter,IN BOOL isAutoUpdisplay = TRUE);


绘光栅图到背景


COM接口_DMxDrawX::DrawImageToBackground


参考说明如下:


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


把DWG文件当着背景导入


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


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


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


对象夹点显示颜色


COM接口IniSet="GripColor=RGB"
C++接口MxDraw::SetGripColor


例如: JS,把夹点颜色改成 红色= 123,绿色=55,蓝色=78,设置GripColor=8075086:


<param name="IniSet" value="GripColor=8075086">
光标控制

设置光标线显示长度:


COM接口_DMxDrawX::CursorLong
_DMxDrawX::SetCursorCrossLong
C++MxDraw::SetCursorCrossLong


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


设置光标矩形框大小:


COM接口_DMxDrawX::CursorWidth
_DMxDrawX::SetCursorPickRect
C++MxDraw::SetCursorPickRect


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


自定义设置光标


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


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


C++接口,该函数有三个重载,从光标文件(cur)加载光标,从光标资源中加载,设置内置光标MxDraw::SetCursor

得到光标函数,用于备份光标,在需要时恢复光标MxDraw::GetCursor


设置默认缺省时光标


COM接口_DMxDrawX::UseArrowCursor


设置默认使用箭头光标,不要使用缺省的十字光标:


<param name="UseArrowCursor" value="1">


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


Iniset属性,DEFAULTCURSOR=MyCursor.cur。


例如JS:


<param name="Iniset" value="DEFAULTCURSOR=MyCursor.cur">


C++接口MxDraw::SetDefaultCursor


void CMxDrawXCtrl::SetUseArrowCursor(VARIANT_BOOL newVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
m_UseArrowCursor = (newVal != VARIANT_FALSE);
if(m_UseArrowCursor)
{
MxDraw::SetDefaultCursor(::LoadCursor(NULL, IDC_ARROW),m_hDrawOcx);
}
else
{
MxDraw::SetDefaultCursor(NULL,m_hDrawOcx);
}
SetModifiedFlag();
}


光标位置


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


COM接口_DMxDrawX::GetInputCursorPos


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


COM接口_DMxDrawX::SetInputCursorPos
坐标图标

显示或隐藏接口:


C++MxDraw::SetDrawCoord
COM接口 DMxDrawX::IsDrawCoord


例如隐藏坐标图标,JS:


<param name="IsDrawCoord" value="0">
浏览模式

浏览模式下,控件会自动加载控件程序目录下的ViewRes目录的工具条文件,并禁用夹点编辑和选择功能。 参考例子:samples\ie\IedemoBrowse.htm


启用接口:


C++MxDraw::SetBrowner
COM接口 DMxDrawX::BrowseMode


例如隐藏坐标图标,JS:


<param name="IsBrowner" value="1">


例如C++  COM:


 void CTestVc2005Dlg::OnBnClickedBrownerButton()
            {
                // TODO: 在此添加控件通知处理程序代码
                static BOOL isBrowner = TRUE;
                m_ocx.SetBrowseMode(isBrowner);
                m_ocx.SetShowMenuBar(!isBrowner);
                m_ocx.SetShowCommandWindow(!isBrowner);
                isBrowner = !isBrowner;
            }
动态提示

控件具有鼠标停在一个对象上,然后自动弹出一个提示信息窗口的功能,效果如下:


stuat.png


参考例子:samples\ie\iedemoTest.htm,点击例子上边的设置超连接按钮,然后把鼠标停在对象上两秒,就能看到效果了。自动提示事件,用户响应该事件,返回需要显示的字符串,返回的字符串支持Html格式化。


COM接口_DMxDrawXEvents::InputPointToolTipEvent
设置提示时间_DMxDrawX::SetToolTipInitialTime
设置ToolTip自动提示隐藏时间_DMxDrawX::SetToolTipPopTime


JS例子说明:


1.  增加InputPointToolTipEvent事件响应函数:


document.getElementById("MxDrawXCtrl").ImpInputPointToolTipFun = DoInputPointToolTipFun;


2.  在事件中返回需要提示的字符串:


function DoInputPointToolTipFun(ent) {
    var sHyperlinks = ent.Hyperlinks;
if(sHyperlinks.length != 0)
{
var sClassName = ent.ObjectName;
 
        var tip = "<b><ct=0x0000FF><al_c>"+sClassName+
           "</b><br><ct=0x00AA00><hr=100%></ct><br><a=\"link\">" + sHyperlinks + "</a>";
 
        mxOcx.SetEventRetString(tip);
    }
    ent = null;
    CollectGarbage();
}


C++接口McEdInputPointMonitor::MonitorInputPointToolTip
设置提示时间MxDraw::SetDynToolTipInitialTime
设置ToolTip自动提示隐藏时间MxDraw::SetDynToolTipPopTime


McEdInputPointMonitor::MonitorInputPointToolTip方法


接口:


virtual Mcad::ErrorStatus MonitorInputPointToolTip(IN const McDbObjectIdArray& pickedEntities, IN const McGePoint3d& pickedPoint, IN CString& sNewToolTipString);


参数:


参数说明
IN const McDbObjectIdArray& pickedEntities

当前光标下面的实体

IN const McGePoint3d& pickedPoint

光标位置

IN CString& sNewToolTipString  

返回提示信息字符串  


参考例子:MxDraw5.2\samples\Edit\Edit.sln中InputPointMonitor.cpp文件。代码如下:


Mcad::ErrorStatus CInputPointMonitor::MonitorInputPointToolTip(IN const McDbObjectIdArray& pickedEntities,
   IN const McGePoint3d& pickedPoint,
   IN CString& sNewToolTipString
   )
{
if(!pickedEntities.isEmpty())
{
AcDbObjectId entId = pickedEntities[0];
AcDbObjectPointer<AcDbEntity> spEnt(entId,AcDb::kForRead);
if(spEnt.openStatus() == Acad::eOk)
{
CString sClassName = spEnt->isA()->name();
 
AcDbHandle handle;
spEnt->getAcDbHandle(handle);
TCHAR szHandle[256];
handle.getIntoAsciiBuffer(szHandle);
 
CString sLayerName;
{
AcDbObjectPointer<AcDbLayerTableRecord> spLayerTableRec(spEnt->layerId(),AcDb::kForRead);
if(spLayerTableRec.openStatus() == Acad::eOk)
{
LPCTSTR pszLayerName = NULL;
spLayerTableRec->getName(pszLayerName);
sLayerName = pszLayerName;
}
}
 
sNewToolTipString.Format(_T("类名:%s,层名:%s,名柄:%s"),sClassName,sLayerName,szHandle);
}
}
return Mcad::eOk;
}
向控件工具增加一个自已的按钮步骤

修改程序代码,增加一个命令函数并导出这个命令。例如:


acedRegCmds()->addCommand(_T("SysCmd"), _T("InsertBlock"), _T("InsertBlock"), 1, InsertBlock);


修改工程MxToolbarIcon.sln,增加一个该命令按钮图标:


addcomd.png


注意,位图的ID需要用引号引起来,来代表位图的ID是个字符串。如下:


addcomd1.png


修改MxDraw-ToolBar.mxt文件,把:


// 工具条文件头说明.
// ("文件类型字符串" "资源文件名" "透明颜色")
("MxDrawToolBarFile" "MxDraw.dll" (214 211 206))



改成:


("MxDrawToolBarFile" "MxToolbarIcon.dll" (214 211 206))


然后,在这个文件中增一个自己命令的按钮。如下:


("插入图块" "插入图块" "InsertBlock" "IDB_PRINT_BITMAP")


效果如下,后面多了一个按钮了。


addcomd2.png


注意:最后,要把MxToolbarIcon.sln编译的DLL放在控件程序相同的目录下。

梦想CAD是专业的CAD插件(控件),可轻松在网页、手机及BS/CS程序中浏览编辑DWG文件,不需安装AutoCAD即可运行。经十余年累积已非常稳定可靠,有关键的空间搜索算法,并使用汇编优化,可同时处理50万级实体,有非常高的图形显示和处理效率。
技术服务
TEL:400-888-5703
185-8173-1060
客服I QQ: 3570505660
技术I QQ: 827867134
技术II QQ:6884123
产品购买
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