CAD控件界面上所有元素都可以控制显示或隐藏,下面逐一介绍,控件界面上的元素位置如下图:
隐藏或显示接口
显示或隐藏所有工具条:
C++接口 | MxDraw::ShowToolBars |
显示或隐藏指定工具条, 工具条名称会在后面的工具条文件格式中说明。
C++接口 | MxDraw::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("绘线,绘矩形框"));
禁用工具条上某个按钮
C++接口 | MxDraw::EnableToolBarControl |
例如禁用打印按钮:
MxDraw::EnableToolBarControl(m_hDrawOcx,_T("打印图形"),FALSE);
工具条文件
CAD控件MxDraw52.dll所在目录下,所有的mxt都是工具条定义文件,每个mxt文件就是一个工具条, 如下:
文件名 | 说明 |
MxDraw-ToolBar.mxt | 常用工具条 |
MxDraw-ToolBar-Draw.mxt | 绘图工具条 |
MxDraw-ToolBar-DrawParam.mxt | 特性工具条 |
MxDraw-ToolBar-Edit.mxt | 编辑工具条 |
MxDraw-ToolBar-ET.mxt | 扩展工具条 |
把不需要的工具条文件删除,CAD控件加载时就不会显示该工具条。
它是文本文件,用记事本打开编辑,格式如下:
“//”是文件中的注释。
文件中第一行是工具条文件头信息,每列内容如下:
如:("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);
CAD控钮在资源文件中的位图ID:
" IDB_OPENWEBDWG_BITMAP "。
ID类型:
目前CAD控件内部使用,一般为空。
资源文件名:
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文件,下面介绍如何显示指定加载工具文件。
C++接口: MXDRAWOCXHANDLE MxDraw::CreateMxDraw第四个参数指定工具条加载文件
显示加载工具条文件
CAD控件支持在需要时,再动态加载工具条文件,接口说明如下:
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); } }
显示或隐藏接口
C++接口: MxDraw::ShowMenuBar
菜单栏文件
CAD控件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注册命令。
图标索引字符串:
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类型:
目前CAD控件内部使用,一般为空。
比如:菜单图标从本地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第五个参数表示菜单加载文件
重新从文件加载菜单接口:
C++ | MxDraw::ReLoadMenu |
禁用或启用菜单项
C++接口函数: | MxDraw::EnableMenuBarControl |
MxDraw::EnableMenuBarControl方法
激活或禁用菜单项奖条上的按钮,说明如下:
参数 | 说明 |
---|---|
MXDRAWOCXHANDLE hOcx | 控件窗口句柄 |
LPCTSTR pszControlName | 按钮的名称,在工具条定义文件(扩展名为mxt)第一列就是按钮名称 |
BOOL isEnable = TRUE | 是否激活,传false禁用工具 |
显示或隐藏菜单项
C++接口 | MxDraw:: HideMenuBarControl |
右键弹出菜单
CAD控件支持鼠标右键弹出菜单,菜单的文件格式和前面的主菜单文件格式一样。
弹出函数C++接口 | MxDraw::TrackPopupMenu |
显示或隐藏接口:
C++: MxDraw::ShowRulerWindow
显示或隐藏接口:
C++: MxDraw::ShowPropertyEditWindow
属性栏功能,默认是没有启用的,需要在CAD控件启动时初始化启用。
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); //… }
显示或隐藏接口:
C++ | MxDraw::ShowCommandWindow |
显示或隐藏接口:
C++ | MxDraw::ShowModelBar |
显示或隐藏接口:
C++ | MxDraw::ShowModelBar |
显示进度条
C++接口:
设置进度条显示范围 | Mx::mcedSetStatusBarProgressMeter |
设置进度条显示位置 | Mx::mcedSetStatusBarProgressMeterPos |
设置进度条走一步 | Mx::mcedSetStatusBarProgressStep |
隐藏进度条 | Mx::mcedRestoreStatusBar |
状态栏上按钮调用
参考“ 梦想CAD控件20-常用系统变量说明.doc ”文档,状态栏上的捕捉,正交等功能如何在自己的程序中设置。
状态栏的梦想Logo
CAD控件试用版本程序,总是会显示该Logo,正式程序就会自动去掉该Logo。
设置视区背景色
C++ | MxDraw::SetViewColor |
设置视区背景色为渐变色
C++ | MxDraw::SetViewGradientColor |
设置背景为渐变色填充,RGB是填充的渐变色,标记为 0,不使用渐变填充颜色,1使用渐变填充颜色。
绘光栅图到背景
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);
把DWG文件当着背景导入
C++接口 | MxDraw::OpenBackgroundFile |
把一个dwg文件,或者图像文件当着一个背景导入,参考说明如下:
VARIANT_BOOL isGreyness | 是否灰显示 |
LONG lightColor | 背景灰度显示颜色 |
VARIANT_BOOL isZoomE | 是否自动把调用ZoomE操作 |
VARIANT_BOOL isUpDisplay | 是否自动调用更新显示 |
sFile | DWGBMPJPG文件路径 |
对象夹点显示颜色
C++接口 | MxDraw::SetGripColor |
设置光标线显示长度:
C++ | MxDraw::SetCursorCrossLong |
设置为0表示无限长:CursorLong= 0,默认值为30。
设置光标矩形框大小:
C++ | MxDraw::SetCursorPickRect |
默认值为6 ,单位是屏幕像素大小。
自定义设置光标
C++接口,该函数有三个重载,从光标文件(cur)加载光标,从光标资源中加载,设置内置光标 MxDraw::SetCursor 。
得到光标函数,用于备份光标,在需要时恢复光标 MxDraw::GetCursor 。
设置默认缺省时光标
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(); }
光标位置
返回光标位置 文档坐标。
C++接口 | MxDraw::GetInputCursorPos |
设置光标位置.pos是文档坐标。
C++接口 | MxDraw::SetInputCursorPos |
显示或隐藏接口:
C++ | MxDraw::SetDrawCoord |
浏览模式下,CAD控件会自动加载CAD控件程序目录下的ViewRes目录的工具条文件,并禁用夹点编辑和选择功能。
启用接口:
C++接口 | MxDraw::SetBrowner |
例如C++调用COM接口:
void CTestVc2005Dlg::OnBnClickedBrownerButton() { // TODO: 在此添加控件通知处理程序代码 static BOOL isBrowner = TRUE; m_ocx.SetBrowseMode(isBrowner); m_ocx.SetShowMenuBar(!isBrowner); m_ocx.SetShowCommandWindow(!isBrowner); isBrowner = !isBrowner; }
CAD控件具有鼠标停在一个对象上,然后自动弹出一个提示信息窗口的功能,效果如下:
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; }
下载地址:
http://www.mxcad.net:2080/cpp/Interface control.zip
打开控件下的MxEdit.sln,在资源视图下添加一个bitmap资源,将ID使用双引号包含,双击该资源,在位图编辑器中进行如下设置:
将要添加的位图复制进该资源,然后编译,编译之后会有BUG,需要重复上述步骤,再次编译,在输出的目标目录下(在工具文件(后缀为mxt)或菜单文件(后缀为mnu)添加一个按钮)
启动我们的演示工程,运行效果如下:
对于此演示,在此文档的同级目录下,在“添加自己的图标.mp4”中进行了演示。
显示隐藏工具条的接口如下:
// ------------------------------------------------------------------------- // Summary: // 隐藏或显示工具条上的按钮 // Parameters: // hOcx - 控件窗口名柄 // sToolBarName - 工条名称 // sControlName - 按钮名称,多个按钮名称,可以用逗号分隔开,为空,隐藏或显示所有按钮 // isHide - 是否隐藏按钮 // isAutoRecalcLayout- 是否自动重新布局窗口上的工具条。 // Returns: // 成功返回TRUE // Remarks: // 例如:VC代码,隐藏绘图工具栏上的绘线和绘矩形框按钮。 // <code> // MxDraw::HideToolBarControl(m_hDrawOcx,_T("绘图工具"),_T("绘线,绘矩形框")); // </code> // ------------------------------------------------------------------------- static BOOL HideToolBarControl(IN MXDRAWOCXHANDLE hOcx, IN LPCTSTR pszToolBarName, IN LPCTSTR pszControlName = NULL, IN BOOL isHide = TRUE , IN BOOL isAutoRecalcLayout = TRUE);
调用实例:
MxDraw::HideToolBarControl(MxDraw::GetCurOcxHandle(), L"ET工具", L"测距");
上段代码即为:隐藏ET工具条上的测距按钮
显示/隐藏工具栏的调用接口如下:
// ------------------------------------------------------------------------- // Summary: // 是否显示工具条 // Parameters: // hOcx - 控件句柄 // isShow - 为TRUE显示所有工具条,否则隐藏所有工具条 // Remarks: // 隐藏或显示所有工具条 // ------------------------------------------------------------------------- static void ShowToolBars(IN MXDRAWOCXHANDLE hOcx,BOOL isShow);
调用实例:
MxDraw::ShowToolBars( MxDraw::GetCurOcxHandle(), TRUE );
上段代码即为:显示所有工具条
或使用如下调用:
MxDraw::ShowToolBars( MxDraw::GetCurOcxHandle(), L"浏览", TRUE );
上段代码即为:显示“浏览”工具条
CAD控件已有如下默认的工具条:
ET工具、编辑工具、特性、绘图工具、常用工具、浏览;
显示/隐藏按钮的调用接口如下:
// ------------------------------------------------------------------------- // Summary: // 隐藏或显示工具条上的按钮 // Parameters: // hOcx - 控件窗口名柄 // sControlName - 按钮名称,多个按钮名称,可以用逗号分隔开,为空,隐藏或显示所有按钮 // isHide - 是否隐藏按钮 // Returns: // 成功返回TRUE // ------------------------------------------------------------------------- static BOOL HideMenuBarControl(IN MXDRAWOCXHANDLE hOcx, IN LPCTSTR pszControlName = NULL, IN BOOL isHide = TRUE) ;
调用实例:
MxDraw::HideMenuBarControl(MxDraw::GetCurOcxHandle(), L"新建(&N)");
上段代码即为:隐藏“新建(&N)”按钮
显示/隐藏菜单栏的调用接口如下:
// ------------------------------------------------------------------------- // Summary: // 是否显示菜单条,默认显示. // Parameters: // hOcx - 控件句柄 // isShow - 为TRUE显示,否则隐藏 // ------------------------------------------------------------------------- static void ShowMenuBar(IN MXDRAWOCXHANDLE hOcx,BOOL isShow);
调用实例:
MxDraw::ShowMenuBar( MxDraw::GetCurOcxHandle(), FALSE );
加载菜单的调用接口如下:
// ------------------------------------------------------------------------- // Summary: // 重新从一个菜单文件加载菜单. // Parameters: // hOcx - 控件句柄,不能为空 // sMenuFile - 需要重新加载的菜单文件。 // Returns: // 成功返回TRUE // ------------------------------------------------------------------------- static BOOL ReLoadMenu(IN MXDRAWOCXHANDLE hOcx,const CString& sMenuFile);
弹出菜单的调用接口如下:
// ------------------------------------------------------------------------- // Summary: // 执行一个命令 // Parameters: // hOcx - 控件句柄 // pszExecute - 命令名 // bActivate - 暂没使用,取默认值 // bWrapUpInactiveDoc - 暂没使用,取默认值 // bEchoString - 是否在命令行显示提示 // pParam - 命令参数,用户不需要自己释放 // bFunCall - 是否直接调用命令函数。 // Remarks: // 执行一个命令,与McApDocManager:: sendStringToExecute函数一样 // 例如:如下执行打开文件命令代码: // <code> // acDocManager->sendStringToExecute(MxDraw::GetDatabase(m_hDrawOcx)->GetDocument() // ,_T("OpenDwg") ); // </code> // ------------------------------------------------------------------------- static bool SendStringToExecute(MXDRAWOCXHANDLE hOcx, LPCTSTR pszExecute, bool bActivate = true, bool bWrapUpInactiveDoc = false, bool bEchoString = true, struct resbuf* pParam = NULL, bool bFunCall = false);
对于以上两个调用接口所需使用的菜单文件,我们在控件的Bin目录下即可找到
修改程序代码,增加一个命令函数并导出这个命令。例如:
acedRegCmds()->addCommand(_T("SysCmd"), _T("InsertBlock"), _T("InsertBlock"), 1, InsertBlock);
修改工程MxToolbarIcon.sln,增加一个该命令按钮图标:
注意,位图的ID需要用引号引起来,来代表位图的ID是个字符串。如下:
修改MxDraw-ToolBar.mxt文件,把:
// 工具条文件头说明. // ("文件类型字符串" "资源文件名" "透明颜色") ("MxDrawToolBarFile" "MxDraw.dll" (214 211 206))
改成:
("MxDrawToolBarFile" "MxToolbarIcon.dll" (214 211 206))
然后,在这个文件中增一个自己命令的按钮。如下:
("插入图块" "插入图块" "InsertBlock" "IDB_PRINT_BITMAP")
效果如下,后面多了一个按钮了。
注意:最后,要把MxToolbarIcon.sln编译的DLL放在CAD控件程序相同的目录下。