關於CAD夢想控制元件介面控制

ywl0224發表於2021-06-04
說明

CAD控制元件介面上所有元素都可以控制顯示或隱藏,下面逐一介紹,控制元件介面上的元素位置如下圖:

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語言,隱藏選單欄

選單欄檔案

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

屬性欄功能,預設是沒有啟用的,需要在控制元件啟動時初始化啟用。

COM介面 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;}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29511035/viewspace-2775451/,如需轉載,請註明出處,否則將追究法律責任。

相關文章