- UID
- 112996
- 积分
- 215
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-3-13
- 最后登录
- 1970-1-1
|
发表于 2004-9-13 01:32:49
|
显示全部楼层
1楼 对Dx 比较粗糙的介绍,只是对Dx功能的部分披露。Dx还没有
正式对外公布,只是在极少数朋友中试用。在书写格式和运作方式
上,Dx很象C/C++,但是与C/C++又有很多不同处,Dx属于解释性
智能型语言,可以象LISP一样方便使用。Dx可以很简洁方式调用
COM 函数、属性,也可以与 AutoLISP函数 很简洁方式 混合调
用,比如,有LISP定义的函数
(defun MyLispFunc ( x y) ....)
可以在Dx中直接调用:
res = MyLispFunc !(88, 999); // 这里是用 !(...) 格式调用的
对Dx介绍太多,很枯燥吧。下面给大家两个应用实例看看:
- // 人们在使用AutoCAD的 offset 和copy 等命令时,往往需要把得到的新的实体的层、
- // 颜色、线型等 设置成当前的对应设置。下面程序可以实现这个功能。在Command下
- // 输入ActEd启动该功能,输入DelEd 则关闭该功能。
- /************************************************************************/
- #package myDemo //开始建立程序包 myDemo,也就是开始建立名字空间
- /************************************************************************/
- private var myEd=NIL;
- /************************************************************************/
- public defun [C:ActEd] () // 定义函数 C:ActEd,自动在AutoCAD命令序列
- // 注册命令 ActEd
- {
- myEd = NIL;
- myEd = EditorReactor (new MyEdReactor);
- // 用下面定义的class MyEdRector 建立Editor反应器
- prinn("Acting myEd...");
- }
- /////////////////////////////////////////////////////////////////////////
- public defun [C:DelEd] ()
- {
- myEd = NIL; // 把程序包中的变量myEd中记录的反应器释放。
- prinn("myEd deleted.");
- }
- /************************************************************************/
- class MyEdReactor // 定义用于Editor反应器的class
- {
- var m_en;
- STR m_curLayer, m_curColor, m_curLtype;
- sub commandWillStart ();
- sub commandEnded (cmd);
- };
- /////////////////////////////////////////////////////////////////////////
- defun MyEdReactor::commandWillStart () // 命令开始时的回调函数
- {
- m_en = entlast();
- m_curLayer = getvar ("CLAYER");
- m_curColor = getvar ("CECOLOR");
- m_curLtype = getvar ("CELTYPE");
- }
- /////////////////////////////////////////////////////////////////////////
- defun MyEdReactor::commandEnded (cmd) // 命令正常结束时的回调函数
- {
- var ss;
- switchx (cmd, TRUE) // switchx 是对switch的拓展:可以不单纯比较整数
- { // 第二个参数是精度设置、或是否不区分字母大小写
- case "OFFSET":
- case "COPY" :
- ss = sslast (m_en); // 获取自m_en 实体之后产生的新的实体集合
- if (!ss) break;
- ss.SetLayer (m_curLayer); // 设置实体集ss中的所有实体的层
- ss.SetColor (m_curColor); // 设置实体集ss中的所有实体的颜色
- ss.SetLtype (m_curLtype); // 设置实体集ss中的所有实体的线型
- break;
- }
- }
- #package //程序包 myDemo 定义结束
- /************************************************************************/
- // 下面程序枚举acadbtn.dll 中的资源:bitmap,并且用工具条的方式显示出来:
- /************************************************************************/
- #include "windows.ch"
- #package myDemo
- /************************************************************************/
- public defun [c:myDemo] () // 定义函数 C:myDEmo,自动在AutoCAD
- // 命令序列 注册命令 MyDemo
- {
- static var hWnd;
- static var count=0, DlgProc;
- if (count == 0) {
- DlgProc = AsWndProc(&myDlgProc());
- // 用函数myDlgProc() 建立对话框回调函数
-
- count++;
- }
- hWnd = NIL;
- hWnd = CreateDialog (ThisInstance(), "BLANCK", AcadDocWnd(), DlgProc);
- // 建立一个非模式对话框
- }
- /////////////////////////////////////////////////////////////////////////
- defun myDlgProc(msg)
- {
- public:
- sub OnInitDialog (msg);
- sub OnCommand (msg);
- sub OnPaint (msg);
- switch (msg.message) {
- case WM_INITDIALOG:
- OnInitDialog(msg);
- return TRUE;
- case WM_COMMAND:
- return OnCommand(msg);
- case WM_PAINT:
- OnPaint(msg);
- return TRUE;
- case WM_CLOSE:
- DestroyWindow(msg.hwnd);
- return TRUE;
- case WM_DESTROY:
- break;
- }
- return FALSE;
- }
- /////////////////////////////////////////////////////////////////////////
- defun myDlgProc.OnInitDialog(msg)
- {
- static var hToolBar;
- static var imgList;
- var tbId=88, hInst=ThisInstance();
- var sourceFile="acadbtn.dll";
- var tbButtons;
- var num, hModule, Enum, lstr;
- hToolBar = NIL;
- imgList = NIL;
- SetWindowText(msg.hwnd, "MyDemo");
- SetWindowPos(msg.hwnd, NULL, 0, 0, 790, 500, 0);
- ShowWindow(msg.hwnd, SW_NORMAL);
- hModule = LoadLibrary (sourceFile);
- if (!hModule) return;
- Enum = new [COLOR=Red]CEnumResource[/COLOR](hModule); //在下面定义
- Enum.Start(); // 开始枚举资源
- if (Enum.m_Lbitmap == NULL) return;
- num = Enum.m_Lbitmap.len();
- hToolBar = CreateToolbarEx ( // 建立工具条
- msg.hwnd,
- WS_CHILD | WS_VISIBLE | WS_BORDER | TBSTYLE_FLAT |
- TBSTYLE_TRANSPARENT |
- TBSTYLE_WRAPABLE | CCS_ADJUSTABLE,
- tbId,
- 0,
- hInst,
- 0,
- NULL,
- 0,
- 0, 0,
- 0, 0,
- sizeof(TBBUTTON)
- );
- tbButtons = new TBBUTTON[num];
- for (i=0; i < num; i++) {
- tbButtons[i].iBitmap = i;
- tbButtons[i].idCommand = i;
- tbButtons[i].fsState = TBSTATE_ENABLED;
- tbButtons[i].fsStyle = TBSTYLE_BUTTON;
- tbButtons[i].iString = 0;
- }
- imgList = ImageList_Create(16, 16, ILC_COLOR8, 0, num);
- lstr = Enum.m_Lbitmap;
- for (i=0; i < num; i++, lstr++) {
- hImg = LoadBitMap(hModule, *lstr);
- ImageList_Add (imgList, hImg, NULL);
- }
- SendMessage (hToolbar, TB_SETIMAGELIST, 0, imgList);
- SendMessage (hToolbar, TB_ADDBUTTONS, num, tbButtons);
- SendMessage (hToolbar, TB_ADDBUTTONS, 0, 0);
- }
- /////////////////////////////////////////////////////////////////////////
- defun myDlgProc.OnCommand(msg)
- {
- switch (msg.wParam) {
- case 0:
- DestroyWindow(msg.hwnd);
- break;
- case 1:
- SendCommand("\3\3LINE ");
- break;
- default:
- return FALSE;
- }
- return TRUE;
- }
- /////////////////////////////////////////////////////////////////////////
- defun myDlgProc.OnPaint(msg)
- {
- hdc = BeginPaint(msg.hwnd);
- }
- /************************************************************************/
- class [COLOR=Red]CEnumResource // 用于枚举资源 [/COLOR]
- {
- public:
- sub CEnumResource( hInst);
- sub Start();
- sub EnumResTypeProc( hInst, pszType, lParam);
- sub EnumResNameProc( hInst, lpszType, lpszName, lParam);
- HINSTANCE m_hInst;
- LSTR m_Lbitmap; // 记录 bitmap名字的字符串数据链
- LSTR m_Licon; // 记录 icon 名字的字符串数据链
- HAPI m_kn32 = api.kernel32;
- // 记录 kernel32.dll的入口句柄
- CB_P3 m_TypeProc; // 记录 3 元变量的回调函数
- CB_P4 m_NameProc; // 记录 4 元变量的回调函数
- };
- /////////////////////////////////////////////////////////////////////////
- defun CEnumResource::CEnumResource ( hInst)
- {
- m_hInst = hInst;
- m_TypeProc = AsProc3 (&EnumResTypeProc(), this);
- // 设置 3 元变量的回调函数
- m_NameProc = AsProc4 (&EnumResNameProc(), this);
- // 设置 4 元变量的回调函数
- }
- /////////////////////////////////////////////////////////////////////////
- defun CEnumResource::Start()
- {
- m_kn32.EnumResourceTypesA( m_hInst, m_TypeProc, NULL);
- }
- /////////////////////////////////////////////////////////////////////////
- defun CEnumResource::EnumResTypeProc( hInst, pszType, lParam)
- {
- m_kn32.EnumResourceNamesA( hInst, pszType, m_NameProc, lParam);
- return TRUE;
- }
- /////////////////////////////////////////////////////////////////////////
- defun CEnumResource::EnumResNameProc( hInst, lpszType, lpszName, lParam)
- {
- if (lpszName <= 0xffff) return TRUE;
- lpszName = (char *) lpszName;
- switch (lpszType)
- {
- case RT_BITMAP:
- m_Lbitmap.add( lpszName);
- break;
- case RT_ICON:
- m_Licon.add( lpszName);
- break;
- }
- return TRUE;
- }
- #package
- /************************************************************************/
|
|