LOGO
帮助文档
旧版文档
说明工具栏菜单栏标尺栏属性栏命令栏模型栏状态栏视区光标控制坐标图标浏览模式动态提示添加自定义图标显示/隐藏工具条或工具条之上的按钮显示/隐藏工具栏显示/隐藏按钮显示/隐藏菜单栏加载菜单向控件工具增加一个自已的按钮步骤
说明

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


view.png

工具栏

隐藏或显示接口


显示或隐藏所有工具条:


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


命令名称命令提示字符串命令名控钮在资源文件中的位图IDID类型资源文件名命令ID没有命定义时,是否不要加载工具按钮
打开网上dwg文件打开网上dwg文件_OpenWebDwgIDB_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控件具有鼠标停在一个对象上,然后自动弹出一个提示信息窗口的功能,效果如下:


stuat.png


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使用双引号包含,双击该资源,在位图编辑器中进行如下设置:



blob.png



将要添加的位图复制进该资源,然后编译,编译之后会有BUG,需要重复上述步骤,再次编译,在输出的目标目录下(在工具文件(后缀为mxt)或菜单文件(后缀为mnu)添加一个按钮)


blob.png


启动我们的演示工程,运行效果如下:



blob.png



对于此演示,在此文档的同级目录下,在“添加自己的图标.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目录下即可找到



blob.png

向控件工具增加一个自已的按钮步骤

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


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控件程序相同的目录下。