ObjectARX2015开发环境设置
ObjectARX开发环境下的AutoCAD对话框设计
袁梅李亚萍张竟
(武汉大学城市建设学院,湖北 武汉 430072)
摘要:在ObjectARX开发环境下,AutoCAD支持两种格式的对话框:PDB对话框和Windows机制的对话框。从简单实例出发,本文介绍了这两种格式的对话框设计。
关键词:ObjectARX;AutoCAD;PDB;MFC;对话框
}
以上只给出了主调用函数drive_main()和回调函数print_cb()、ok_cb()的部分代码,相当于ObjectARX应用程序中的用户程序主体函数部分,Mypdb.cpp中头文件部分、函数声明部分和接口函数部分和一般的ObjectARX应用程序要求相同,不再写出。必须注意,头文件中一定要有#include“adsdlg.h”。
Microsoft基础类库(MFC)给软件开发者提供了一种便捷快速建立标准的用户界面的方法。ObjectARX开发环境也提供了一系列基于MFC的用户界面类,我们可以使用这些类设计Windows风格的对话框。使用Windows对话框的ObjectARX应用程序将使自己的界面与AutoCAD内建对话框界面完全一致,且可与其它Windows应用程序紧密集成在一起,共享Windows的各种资源,而且程序的维护也非常方便。在ObjectARX应用程序中使用MFC最明显的优点是可以充分利用MSVC(Microsoft Visual C++)开发环境提供的先进技术和工具,实现程序界面的可视化设计。Windows对话框也是Autodesk极力推荐开发者使用的对话框。
在CAD软件开发中,对话框的设计是软件开发者非常关心的问题之一。AutoCAD除了使用命令行与用户进行交互外,还可使用对话框。对话框是一种边界固定的窗口,也是一种最先进、最流行的人机交互界面。运用对话框可以方便地实现程序设计时的数据传输和信息传输,,所以在当今的几乎所有的软件都要用到对话框界面与用户交流。在CAD的二次开发中,可以采用两种方式使用对话框技术:,一种是PDB格式,即使用AutoCAD系统本身提供的可编程对话框技术,另一种是使用Windows机制的对话框设计技术。
【C#】VS2015开发环境的安装和配置(一)2016-08-03更新
【C#】VS2015开发环境的安装和配置(⼀)2016-08-03更新分类:C#、VS2015、WPF、 MVC、Android、iOS、Unity3D;更新⽇期:2016-08-03⼀、简介为了避免⽹上乱七⼋糟的过时介绍,避免误导初学者,这次把⾄2016年8⽉初C#开发环境各种版本的更新和安装过程重新整理⼀下。
⽬的是为了让对C#感兴趣的初学者知道到底哪些是过时的,哪些是最新的,哪些是别有⽤⼼的⼈故意给你挖的坑。
先说⼀下VS2015的官⽅⽹址(这是你了解VS2015以及它到底能做哪些事的第1步):https:///en-us/visual-studio-homepage-vs.aspx其中:VS2015 Enterprise(含Update3)是功能最全且性能⽆限制的商业版本。
VS2015 Community(含Update3)是全功能的免费版说明:微软搞的免费的VS2015 Community的作⽤和IBM搞的免费的Eclipse作⽤相同,都是为了吸引开发者的。
如果你能忍受性能的限制,如果你想玩没有⼈去承担责任的各种开源架构,如果你想将各种开源程序直接拿来糊弄⽼板,如果⽼板想⽤0%的投资赚取100%的利润(呵呵,……),那么,对于C#开发⼈员来说,VS2015 Community是⾸选;对于Java开发⼈员来说,Eclipse是⾸选。
为什么?原因很简单,微软和IBM肯定都不会去找你的⿇烦,只要你的⽤户能忍受你搞的⼤杂烩就⾏了。
但是,如果你想让开发的系统稳定可靠,⽽且没有性能限制,还是⽤收费的企业版吧(学习时可以⽤破解的)。
本博客介绍的就是这个版本(VS2015简体中⽂企业版)。
⼆、截⾄到2016年8⽉各种开发⼯具的最新版本1、VS2015:Update32、Android SDK:25.1.73、Xmarin for Visual Studio:4.1.2.184、HAXM:6.0.35、Unity:5.3.5f16、Visual Studio Tools for Unity:2.37、百度Android SDK:4.0.08、百度TTS:2.2.7本博客后⾯的安装和⽰例运⾏截图都是针对上⾯介绍的这些最新版本⽽⾔的。
基于ObjectARX技术的数据交换方法及实现
基于ObjectARX技术的数据交换方法及实现衷秋【摘要】文章讨论了利用ObjectARX技术从AutoCAD的DXF文件中提取图形数据信息,并将这些信息存储到外部数据库中,采用ADO技术实现数据库访问的方法.该方法能够快速、有效地实现基于外部数据库的AutoCAD图形的数据交换.【期刊名称】《南通航运职业技术学院学报》【年(卷),期】2011(010)002【总页数】4页(P50-53)【关键词】ObjectARX;数据库;ADO;数据交换【作者】衷秋【作者单位】淮安市水利勘测设计研究院,江苏淮安223001【正文语种】中文【中图分类】TP391.720 引言ObjectARX是针对AutoCAD二次开发而推出的一个开发软件包,它提供了面向对象的编程方法和独特的事件驱动机制,能快速的访问AutoCAD图形数据库。
AutoCAD进行二次开发的工具主要有:VBA和AutoLISP、.NET、ObjectARX 等。
其中ObjectARX以开发效率高、功能强大而著称。
ObjectARX提供了一个面向对象的C++应用程序开发环境,使程序开发人员能够使用、定制和扩展AutoCAD。
[1]AutoCAD是目前工程设计中使用最为广泛的绘图软件,其提供的开放的体系结构和多样化的开发工具使测量数据与外部数据库进行数据交换成为可能,利用外部大型数据库技术,便于管理大量测量数据,进行数据挖掘,获取更多有用信息。
本文主要论述利用ObjectARX技术从AutoCAD中获取测量图形数据,存入外部SQL Server数据库中,实现AutoCAD内部数据与外部数据库数据交换。
1 图形交换文件DXF图形交换文件(Drawing Exchange File,缩写为DXF)是一种ASC II文本文件,它包含对应的DWG文件的全部信息,可以与第三方文件有良好的数据交换,但是作为开发软件的VC++却没有为DXF文件设立接口函数。
在DXF文件中,不同的数据结构中有各自的组码系列,表达不同的数据结构含义,组码表明其后的值的类型。
ObjectARX开发常用资料
ARX开发常用资料一、ADS函数与ARX函数对比 (2)二、ARX里定义的数据类型 (10)三、结果类型码 (11)四、函数返回结果类型代码: (12)五、其它代码 (12)六、用户输入控制位代码:由函数acedInitGet()先发控制 (13)七、对象捕捉编码及设置对象捕捉代码 (13)八、CAD环境变量 (14)一、ADS函数与ARX函数对比二、ARX里定义的数据类型三、结果类型码四、函数返回结果类型代码:五、其它代码六、用户输入控制位代码:由函数acedInitGet()先发控制七、对象捕捉编码及设置对象捕捉代码ObjectArx修改捕捉模式实现方式//获取捕捉模式struct resbuf rb;acedGetVar(_T("osmode"), &rb);//设置捕捉模式struct resbuf *newsnap;newsnap=ads_buildlist(RTSHORT,n,0);acedSetVar(_T("osmode"), newsnap);acutRelRb(newsnap);八、CAD环境变量所谓系统变量就是一些参数,这些参数有些是可以在“选项”或其他对话框中进行设置的,有些这必须通过在命令行输入变量名进行设置,当然对于高手来说,还可以通过二次开发程序来进行控制。
CAD有很多的变量,例如FILL或FILLMODE控制填充的显示,ATTMODE控制块属性的显示,等等,了解一些常用的系统变量,当你的图纸出现一些问题时,你可以对出现问题的原因有些初步的判断,并可以通过修改变量设置快速解决。
在CAD(无论是AUTOCAD 还是浩辰CAD等其他CAD)的帮助中通常有可以系统变量的介绍,随时到帮助查询也非常方便。
我在网上看到一个CAD系统变量大全,放到这里,希望对您了解系统变量的作用有点帮助。
CAD的系统变量非常多,我们不可能记住所有变量的作用,我会用红色将一些大家可能会用到的变量标示出来,如果这个变量在对话框中无法设置,建议大家关注或记住,其他变量大家如果有需要时可以再查帮助或打开这篇博文里来查一查。
如何创建一个ObjectArx程序
如何创建一个ObjectArx程序?本小节通过一个简单的实例来讲述ARX程序的创建过程,介绍编制Object ARX程序的一些基本步骤和原则,并初步了解ARX程序与AutoCAD进行通讯的方式。
如同学习其它计算机语言一样,我们首先来创建一个最简单的ARX程序—“Hello.ARX”,在AutoCAD 2002中加载并运行该程序,将会在命令行出现-“Hello, ObjectARX!”。
38.2.1 建立ARX程序的基本步骤由于ARX程序是一种可以共享AutoCAD地址空间并对AutoCAD进行直接调用的动态链接库,因此应该按照下列基本步骤建立ARX程序:(1) 创建自定义类来实现新的命令:用户可以从ARX类层次关系中的大多数类和符号表类中派生自己的类。
(2) 决定ARX程序应该响应的AutoCAD消息:AutoCAD通过向ARX程序发出一系列的消息指明在它内部发生的特殊事件,ARX程序必须对其中的某些消息作出反映,并触发相应的操作。
(3) 实现应用程序与AutoCAD通信的入口:AutoCAD通过函数acrxEntryPoint()来调用ARX程序,而不是象普通的C++程序那样使用main()函数。
函数acrxEntryPoint()中可以用switch语句处理AutoCAD的各种返回信息,根据不同信息执行不同的函数,并返回状态码。
如果针对特定的消息返回出错代码,则必须用case语句来处理。
最后,必须用AcRx::kRetOk 作为函数acrxEntryPoint()的最终返回值。
(4) 完成ARX程序的初始化:用户必须在acrxEntryPoint()函数的AcRx::kInitAppMsg 事件中或者该事件调用的函数(例如:initApp()函数)中,对程序中自定义的所有类进行初始化,然后调用acedRegCmds->addCommand()函数在AutoCAD命令堆栈中注册新命令。
(5) 实现卸载(Unload)功能:用户必须在acrxEntryPoint()函数的AcRx:: kUnloadAppMsg 事件中或者该事件调用的函数(例如:unloadApp()函数)中,调用acedRegCmds->removeGroup()函数将initApp()函数中注册的新命令组从AutoCAD命令堆栈中清除,调用deleteAcRxClass()函数清除程序中自定义的任何类,然后删除所有由应用程序添加到AutoCAD中的对象,并清除所有与AcDbObject、AcDbDatabase、AcRxDynamicLinker或AcEditor对象相关联的事件反应器。
[AutoCAD二次开发][2017]Autocad2017ObjectARX开发环境配置。。。
[AutoCAD⼆次开发][2017]Autocad2017ObjectARX开发环境配置。
碎碎念不得不说autocad⼆次开发的相关资料真的少,⼤多数还很旧。
图书馆⾥VBA的⼀本最近出版时间是2006,AutoLisp的2013(还是个⼗⼆五规划教材),ObjectARX的书是2014年出的,结果开发的是autocad2010,还配套VS2008,⾥⾯的内容也是......惨不忍睹......不过⼥朋友设计院的插件在AutoCAD2017上⼀⽤就崩也不是个办法(说实话⽤上2017就再也不想回2011了),只好⾃⼰找AutoCAD 2017的官⽅资料开搞。
⾸先是技术选型问题,就查找到的资料⽽⾔⼆次开发有三个流派,AutoLisp,VBA(ActiveX), Cpp/C#(.Net + ObjectARX)。
AutoLisp不了解,⽬前主要是解决问题(实现那⼀⽤就崩的插件⾥的⼀个⼩功能,功能下⽂再详细叙述),暂时不打算从头开始撸Lisp。
ActiveX的提供(据说)很少,VBA我也不是很熟,作为次要选择。
那么⾸先就先试试ObjectARX的⽔。
正⽂AutoCAD 2017 的官⽅开发⽂档地址:此外在Develop Center有坑学习资料。
⽹址⾸先要下载ObjectArx2017的库。
另外ARX集成到VS2015开发环境的Wizard不包含在库的安装包中,需要另外单独下载。
ObjectARX2017库下载地址(需要Submit个⼈信息):Wizard下载地址:⾸先安装ObjectARX库,它让你指定⼀个解压路径,解压完成后并不会有可执⾏⽂件进⾏进⼀步安装。
这⾥⾯的⽂件根据32位和64位分别⽤于提供给VS2015来include和link。
其次安装Wizard。
装完Wizard之后Visual C++就会出现Autodesk开发的模板。
安装Wizard这⾥有个坑: 如果直接双击安装,随后VS⾥⼯程创建时不会成功的。
objectarx 开发人员手册
ObjectARX开发人员手册目录一、ObjectARX开发简介1.1 什么是ObjectARX?1.2 ObjectARX的应用领域1.3 ObjectARX的基本原理1.4 ObjectARX的发展历程二、ObjectARX环境搭建2.1 开发环境准备2.2 ObjectARX SDK安装2.3 开发工具选择2.4 环境配置及注意事项三、ObjectARX开发入门3.1 基本概念及术语3.2 ObjectARX编程框架3.3 第一个ObjectARX程序四、ObjectARX开发核心知识4.1 对象模型4.2 数据访问和修改4.3 事件处理4.4 自定义命令和操作4.5 交互式绘图五、ObjectARX开发高级技巧5.1 高效数据管理5.2 多线程编程5.3 性能优化5.4 构建扩展应用程序六、ObjectARX开发实例6.1 绘图应用实例6.2 数据处理应用实例6.3 CAD环境集成实例6.4 其他领域实例七、ObjectARX开发注意事项7.1 内存管理7.2 线程安全7.3 安全性考虑7.4 与AutoCAD版本兼容性7.5 其他注意事项八、ObjectARX开发资源8.1 冠方文档和教程8.2 开发社区和论坛8.3 第三方扩展库8.4 实用工具和示例九、ObjectARX开发未来展望9.1 行业发展趋势9.2 技术更新和发展9.3 ObjectARX的发展方向一、ObjectARX开发简介1.1 什么是ObjectARX?ObjectARX是AutoCAD的二次开发接口,简单来说,它是AutoCAD的扩展开发评台。
通过ObjectARX,开发者可以利用C++、C#、VB等语言编写自定义应用程序,扩展和定制AutoCAD的功能,实现各种与CAD相关的应用开发。
1.2 ObjectARX的应用领域ObjectARX广泛应用于工程设计、土木工程、建筑设计、机械设计等领域。
开发者可以利用ObjectARX开发CAD扩展功能、自定义命令、数据处理工具、智能绘图等应用,帮助用户提高工作效率,满足特定行业的需求。
使用ObjectARX2015开发类似outlook浮动面板窗格资料
使用ObjectARX2015开发类似outlook浮动面板窗格开发步骤如下:1.建立新项目,基于MFC类项目。
2.添加基于arx类库的浮动对话框类,添加完后,会自动生成DockControlBar和DockControlBarChildDlg文件。
3.在DockControlBarChildDlg设置CMFCOutlookBar和CTreeCtrl变量函数。
4.运行程序,生成.arx文件,然后再AutoCAD2015中加载,效果如下:5.左侧面板中每个节点运行时可以对应一个已经开发完的arx程序,但首先应该在AutoCAD中加载这些函数。
附件:源程序DockControlBar.h// (C) Copyright 2002-2007 by Autodesk, Inc.//// Permission to use, copy, modify, and distribute this software in// object code form for any purpose and without fee is hereby granted,// provided that the above copyright notice appears in all copies and// that both that copyright notice and the limited warranty and// restricted rights notice below appear in all supporting// documentation.//// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE// UNINTERRUPTED OR ERROR FREE.//// Use, duplication, or disclosure by the U.S. Government is subject to// restrictions set forth in FAR 52.227-19 (Commercial Computer// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)// (Rights in Technical Data and Computer Software), as applicable.////-----------------------------------------------------------------------------//----- DockControlBar.h : Declaration of the CDockControlBar//-----------------------------------------------------------------------------#pragma once//-----------------------------------------------------------------------------#include"acui.h"#include"DockControlBarChildDlg.h"//-----------------------------------------------------------------------------class CDockControlBar : public CAcUiDockControlBar {DECLARE_DYNAMIC (CDockControlBar)public://----- Child dialog which will use the resource id suppliedCDockControlBarChildDlg *mChildDlg ;public:CDockControlBar ();virtual ~CDockControlBar ();public:virtual BOOL Create (CWnd *pParent, LPCTSTR lpszTitle) ;virtual void SizeChanged (CRect *lpRect, BOOL bFloating, int flags) ;virtual CSize CalcFixedLayout( BOOL bStretch , BOOL bHorz );afx_msg int OnCreate (LPCREATESTRUCT lpCreateStruct) ;afx_msg void OnSysCommand (UINT nID, LPARAM lParam) ;afx_msg void OnSize (UINT nType, int cx, int cy) ;DECLARE_MESSAGE_MAP()afx_msg void OnClose();} ;DockControlBar.cpp// (C) Copyright 2002-2007 by Autodesk, Inc.//// Permission to use, copy, modify, and distribute this software in// object code form for any purpose and without fee is hereby granted,// provided that the above copyright notice appears in all copies and// that both that copyright notice and the limited warranty and// restricted rights notice below appear in all supporting// documentation.//// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE// UNINTERRUPTED OR ERROR FREE.//// Use, duplication, or disclosure by the U.S. Government is subject to// restrictions set forth in FAR 52.227-19 (Commercial Computer// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)// (Rights in Technical Data and Computer Software), as applicable.////-----------------------------------------------------------------------------//----- DockControlBar.cpp : Implementation of CDockControlBar//-----------------------------------------------------------------------------#include"StdAfx.h"#include"resource.h"#include"DockControlBar.h"//-----------------------------------------------------------------------------IMPLEMENT_DYNAMIC (CDockControlBar, CAcUiDockControlBar)BEGIN_MESSAGE_MAP(CDockControlBar, CAcUiDockControlBar)ON_WM_CREATE()ON_WM_SYSCOMMAND()ON_WM_SIZE()ON_WM_CLOSE()END_MESSAGE_MAP()//-----------------------------------------------------------------------------//----- CDockControlBar *pInstance = new CDockControlBar;//----- pInstance->Create (acedGetAcadFrame (), "My title bar") ;//----- pInstance->EnableDocking (CBRS_ALIGN_ANY) ;//----- pInstance->RestoreControlBar () ;//-----------------------------------------------------------------------------static CLSID clsCDockControlBar = {0xeab78c04, 0x2194, 0x47ad, {0xa4, 0xf2, 0xad, 0xca, 0x3e, 0x3b, 0xb6, 0x3c}} ;//-----------------------------------------------------------------------------CDockControlBar::CDockControlBar () : CAcUiDockControlBar() {mChildDlg = NULL;}//-----------------------------------------------------------------------------CDockControlBar::~CDockControlBar () {}//-----------------------------------------------------------------------------#ifdef _DEBUG//- Please uncomment the 2 following lines to avoid linker error when compiling//- in release mode. But make sure to uncomment these lines only once per project//- if you derive multiple times from CAdUiDockControlBar/CAcUiDockControlBar//- classes.//void CAdUiDockControlBar::AssertValid () const {//}#endif//-----------------------------------------------------------------------------BOOL CDockControlBar::Create (CWnd *pParent, LPCTSTR lpszTitle) {CString strWndClass ;strWndClass =AfxRegisterWndClass (CS_DBLCLKS, LoadCursor (NULL, IDC_ARROW)) ;CRect rect (0, 0, 150, 200) ;if (!CAcUiDockControlBar::Create (strWndClass, lpszTitle, WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,rect, pParent, 0))return (FALSE) ;SetToolID (&clsCDockControlBar) ;// TODO: Add your code herereturn (TRUE) ;}//-----------------------------------------------------------------------------//----- This member function is called when an application requests the window be //----- created by calling the Create or CreateEx member functionint CDockControlBar::OnCreate (LPCREATESTRUCT lpCreateStruct) {if ( CAcUiDockControlBar::OnCreate (lpCreateStruct) == -1 )return (-1) ;//----- Point to our resourceCAcModuleResourceOverride resourceOverride;//----- Create it and set the parent as the dockctrl barmChildDlg = new CDockControlBarChildDlg;mChildDlg->Create (IDD_DOCKCONTROLBAR, this) ;//----- Move the window over so we can see the control linesmChildDlg->MoveWindow (0, 0, 150, 100, TRUE) ;return (0) ;}//-----------------------------------------------------------------------------void CDockControlBar::SizeChanged (CRect *lpRect, BOOL bFloating, int flags) { // If validif (::IsWindow (mChildDlg->GetSafeHwnd ())){//----- Always point to our resource to be safeCAcModuleResourceOverride resourceOverride ;//----- Then update its window size relativelymChildDlg->SetWindowPos (this, lpRect->left + 4, lpRect->top + 4, lpRect->Width (), lpRect->Height (), SWP_NOZORDER) ;}}//-----------------------------------------------------------------------------CSize CDockControlBar::CalcFixedLayout( BOOL bStretch , BOOL bHorz ){//如果当前处于浮动状态if (IsFloating()){CRect m_r1;GetClientRect(m_r1);//m_childDlg->SetWindowPos (this, m_r1.left+2, m_r1.top, m_r1.Width (),m_r1.Height (), SWP_NOZORDER) ;return CSize(150,450);}else//处于固定状态{return CSize(150,450);}}//-----------------------------------------------------------------------------//----- Function called when user selects a command from Control menu or when user//----- selects the Maximize or the Minimize button.void CDockControlBar::OnSysCommand (UINT nID, LPARAM lParam) {CAcUiDockControlBar::OnSysCommand (nID, lParam) ;}//-----------------------------------------------------------------------------//----- The framework calls this member function after the window's size has changedvoid CDockControlBar::OnSize (UINT nType, int cx, int cy) {CAcUiDockControlBar::OnSize (nType, cx, cy) ;// If validif (::IsWindow (mChildDlg->GetSafeHwnd ())){//----- Always point to our resource to be safeCAcModuleResourceOverride resourceOverride ;//----- then update its window position relativelymChildDlg->MoveWindow (0, 0, cx, cy) ;}}void CDockControlBar::OnClose(){// TODO: Add your message handler code here and/or call defaultif (mChildDlg != NULL){DestroyWindow();}CAcUiDockControlBar::OnClose();}DockControlBarChildDlg.h// (C) Copyright 2002-2007 by Autodesk, Inc.//// Permission to use, copy, modify, and distribute this software in// object code form for any purpose and without fee is hereby granted,// provided that the above copyright notice appears in all copies and// that both that copyright notice and the limited warranty and// restricted rights notice below appear in all supporting// documentation.//// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE// UNINTERRUPTED OR ERROR FREE.//// Use, duplication, or disclosure by the U.S. Government is subject to// restrictions set forth in FAR 52.227-19 (Commercial Computer// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)// (Rights in Technical Data and Computer Software), as applicable.////-----------------------------------------------------------------------------//----- DockControlBarChildDlg.h : Declaration of the CDockControlBarChildDlg //-----------------------------------------------------------------------------#pragma once//-----------------------------------------------------------------------------#include"acui.h"//-----------------------------------------------------------------------------class CDockControlBarChildDlg : public CAcUiDialog {DECLARE_DYNAMIC (CDockControlBarChildDlg)public:CDockControlBarChildDlg (CWnd *pParent =NULL, HINSTANCE hInstance =NULL) ;enum { IDD = IDD_DOCKCONTROLBAR};public:CMFCOutlookBar m_wndOutlookBar;//CMFCOutlookBarPane m_wndOutlookPane;CTreeCtrl m_wndTree; //结构分析CTreeCtrl m_wndTree1;//工具箱CTreeCtrl m_wndTree2;//绘图CImageList Treelist;protected:virtual void DoDataExchange (CDataExchange *pDX) ;virtual BOOL OnCommand (WPARAM wParam, LPARAM lParam) ;protected:afx_msg LRESULT OnAcadKeepFocus (WPARAM wParam, LPARAM lParam) ;afx_msg void OnDblClkTree(NMHDR* pNMHDR, LRESULT* pResult);afx_msg void OnDblClkTree1(NMHDR* pNMHDR, LRESULT* pResult);afx_msg void OnDblClkTree2(NMHDR* pNMHDR, LRESULT* pResult);protected:DECLARE_MESSAGE_MAP()public:virtual BOOL OnInitDialog();BOOL CreateTreeControl();BOOL CreateTreeControl1();BOOL CreateTreeControl2();} ;DockControlBarChildDlg.cpp// (C) Copyright 2002-2007 by Autodesk, Inc.//// Permission to use, copy, modify, and distribute this software in// object code form for any purpose and without fee is hereby granted,// provided that the above copyright notice appears in all copies and// that both that copyright notice and the limited warranty and// restricted rights notice below appear in all supporting// documentation.//// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE// UNINTERRUPTED OR ERROR FREE.//// Use, duplication, or disclosure by the U.S. Government is subject to// restrictions set forth in FAR 52.227-19 (Commercial Computer// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)// (Rights in Technical Data and Computer Software), as applicable.////-----------------------------------------------------------------------------//- DockControlBar.cpp : Implementation of CDockControlBarChildDlg//-----------------------------------------------------------------------------#include"StdAfx.h"#include"resource.h"#include"DockControlBarChildDlg.h"#include"My_SubFunctions.h"//-----------------------------------------------------------------------------#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif//-----------------------------------------------------------------------------IMPLEMENT_DYNAMIC (CDockControlBarChildDlg, CAcUiDialog)BEGIN_MESSAGE_MAP(CDockControlBarChildDlg, CAcUiDialog)//{{AFX_MSG_MAP(CDockControlBarChildDlg)ON_MESSAGE(WM_ACAD_KEEPFOCUS, OnAcadKeepFocus) // Needed for modeless dialog.//}}AFX_MSG_MAPON_NOTIFY(NM_DBLCLK, ID_VIEW_TASKPANE_CTREE, OnDblClkTree)ON_NOTIFY(NM_DBLCLK, ID_VIEW_TASKPANE_CTREE1, OnDblClkTree1)ON_NOTIFY(NM_DBLCLK, ID_VIEW_TASKPANE_CTREE2, OnDblClkTree2)END_MESSAGE_MAP()//-----------------------------------------------------------------------------CDockControlBarChildDlg::CDockControlBarChildDlg (CWnd *pParent/*=NULL*/, HINSTANCE hInstance/*=NULL*/) : CAcUiDialog (CDockControlBarChildDlg::IDD, pParent, hInstance) { //{{AFX_DATA_INIT(CDockControlBarChildDlg)//}}AFX_DATA_INIT}//-----------------------------------------------------------------------------void CDockControlBarChildDlg::DoDataExchange (CDataExchange *pDX) { CAcUiDialog::DoDataExchange (pDX) ;//{{AFX_DATA_MAP(CDockControlBarChildDlg)//}}AFX_DATA_MAP}//-----------------------------------------------------------------------------//- Needed for modeless dialogs to keep focus.//- Return FALSE to not keep the focus, return TRUE to keep the focusLRESULT CDockControlBarChildDlg::OnAcadKeepFocus (WPARAM wParam, LPARAM lParam) { return (TRUE) ;}//-----------------------------------------------------------------------------//- As this dialog is a child dialog we need to disable ok and cancelBOOL CDockControlBarChildDlg::OnCommand (WPARAM wParam, LPARAM lParam) { switch ( wParam ) {case IDOK:case IDCANCEL:return (FALSE) ;}return (CAcUiDialog::OnCommand (wParam, lParam)) ;}BOOL CDockControlBarChildDlg::OnInitDialog(){CAcUiDialog::OnInitDialog();// TODO: Add extra initialization hereCMFCOutlookBarTabCtrl::EnableAnimation ();if (!m_wndOutlookBar.Create (_T("Shortcuts"), this,CRect(0,0,150-5,450-30),ID_VIEW_OUTLOOKBAR, WS_CHILD | WS_VISIBLE | CBRS_LEFT)){TRACE0("Failed to create outlook bar\n");return FALSE; // fail to create}CMFCOutlookBarTabCtrl* pShortcutsBarContainer = DYNAMIC_DOWNCAST(CMFCOutlookBarTabCtrl, m_wndOutlookBar.GetUnderlyingWindow ());if (pShortcutsBarContainer == NULL){TRACE0("Cannot get outlook bar container\n");return FALSE;}//***************************************if (!CreateTreeControl()){TRACE0("Failed to create the custom window\n");return -1; // fail to create}pShortcutsBarContainer->AddTab(&m_wndTree, _T("结构分析"), 0, FALSE);//***************************************if (!CreateTreeControl1()){TRACE0("Failed to create the custom window\n");return -1; // fail to create}pShortcutsBarContainer->AddTab(&m_wndTree1, _T("工具箱"), 1, FALSE);//***************************************if (!CreateTreeControl2()){TRACE0("Failed to create the custom window\n");return -1; // fail to create}pShortcutsBarContainer->AddTab(&m_wndTree2, _T("绘图"), 2, FALSE);return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE}BOOL CDockControlBarChildDlg::CreateTreeControl(){Treelist.Create(16,16,ILC_COLOR32|ILC_MASK,0,0);Treelist.Add(::AfxGetApp()->LoadIconW(IDI_ICON_XY));Treelist.Add(::AfxGetApp()->LoadIconW(IDI_ICON_XY));CRect rectDummy (0, 0, 0, 0);const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES |TVS_LINESATROOT | TVS_HASBUTTONS;if(!m_wndTree.Create (dwTreeStyle, rectDummy, this, ID_VIEW_TASKPANE_CTREE)){TRACE0("Failed to create the custom window\n");return FALSE;}m_wndTree.SetImageList(&Treelist,TVSIL_NORMAL);HTREEITEM tree;m_wndTree.ModifyStyle(NULL,TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);tree=m_wndTree.InsertItem(_T("结构静力计算"),0,0); //"0"为项的图像在tree view控件的图像列表中的索引。
ObjectARX简介
ObjectARX的介绍ObjectARX目前最新的版本是ObjectARX2010。
它是应用软件与Internet的接口。
通过支持XML,为ObjectARX开发网络协作应用提供了有力的支持。
编辑本段开发环境设置运用ObjectARX进行二次开发,必须首先设置好ObjectARX的开发环境。
目前常用的开发环境是Microsoft Visual C++ 6.0 、Microsoft visual studio 2005、Microsoft visual studio 2008。
同时,还需要安装ObjectARX SDK,ObjectARX SDK可以在AutoDesk公司的网站上免费下载。
不同的AutoCAD版本对应相应的ObjectARX SDK的版本,目前常用的是ObjectARX SDK for AutoCADR14和ObjectARX SDK for AutoCAD2000i。
这两个开发工具在设置上略有不同,将进行对比介绍。
安装好VC++和ObjectARX后,就可以开始设置开发环境了。
寻找路径设置INC和LIB文件寻找路径INC和LIB文件寻找路径为VC++的环境参数,设置一次即可,对以后的所有项目均有效。
选择Tools→Options …,出现Option对话框,选择Directories页,在Show Directories for中选择Include files,然后在Directories中加上ARX的INC目录路径c:\objectarx\inc(假定ARX的开发工具在c:\objectarx\中)。
在Show Directories for中选择Library files,然后在Directories 中加上ARX的LIB目录路径c:\objectarx\lib(假定ARX的开发工具在c:\objectarx\中项目环境建立项目并设置编译环境一般来说,开发的ObjectARX应用程序都需要支持MFC(如采用对话框等),因此,我们可以直接建立支持MFC的ObjectARX开发项目。
使用ObjectARX2015开发类似outlook浮动面板窗格
使用ObjectARX2015开发类似outlook浮动面板窗格开发步骤如下:1.建立新项目,基于MFC类项目。
2.添加基于arx类库的浮动对话框类,添加完后,会自动生成DockControlBar和DockControlBarChildDlg文件。
3.在DockControlBarChildDlg设置CMFCOutlookBar 和CTreeCtrl变量函数。
4.运行程序,生成.arx文件,然后再AutoCAD2015中加载,效果如下:5.左侧面板中每个节点运行时可以对应一个已经开发完的arx程序,但首先应该在AutoCAD中加载这些函数。
附件:源程序DockControlBar.h// (C) Copyright 2002-2007 by Autodesk, Inc.//// Permission to use, copy, modify, and distribute this software in// object code form for any purpose and without fee is hereby granted,// provided that the above copyright notice appears in all copies and// that both that copyright notice and the limited warranty and// restricted rights notice below appear in all supporting// documentation.//// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE// UNINTERRUPTED OR ERROR FREE.//// Use, duplication, or disclosure by the U.S. Government is subject to// restrictions set forth in FAR 52.227-19 (Commercial Computer// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)// (Rights in Technical Data and Computer Software), as applicable.////-----------------------------------------------------------------------------//----- DockControlBar.h : Declaration of the CDockControlBar//-----------------------------------------------------------------------------#pragma once//-----------------------------------------------------------------------------#include"acui.h"#include"DockControlBarChildDlg.h"//-----------------------------------------------------------------------------class CDockControlBar : public CAcUiDockControlBar {DECLARE_DYNAMIC (CDockControlBar)public://----- Child dialog which will use the resource id suppliedCDockControlBarChildDlg *mChildDlg ;public:CDockControlBar ();virtual ~CDockControlBar ();public:virtual BOOL Create (CWnd *pParent, LPCTSTR lpszTitle) ;virtual void SizeChanged (CRect *lpRect, BOOL bFloating, int flags) ;virtual CSize CalcFixedLayout( BOOL bStretch , BOOL bHorz );afx_msg int OnCreate (LPCREATESTRUCT lpCreateStruct) ;afx_msg void OnSysCommand (UINT nID, LPARAM lParam) ;afx_msg void OnSize (UINT nType, int cx, int cy) ;DECLARE_MESSAGE_MAP()afx_msg void OnClose();} ;DockControlBar.cpp// (C) Copyright 2002-2007 by Autodesk, Inc.//// Permission to use, copy, modify, and distribute this software in// object code form for any purpose and without fee is hereby granted,// provided that the above copyright notice appears in all copies and// that both that copyright notice and the limited warranty and// restricted rights notice below appear in all supporting// documentation.//// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE// UNINTERRUPTED OR ERROR FREE.//// Use, duplication, or disclosure by the U.S. Government is subject to// restrictions set forth in FAR 52.227-19 (Commercial Computer// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)// (Rights in Technical Data and Computer Software), as applicable.////-----------------------------------------------------------------------------//----- DockControlBar.cpp : Implementation of CDockControlBar//-----------------------------------------------------------------------------#include"StdAfx.h"#include"resource.h"#include"DockControlBar.h"//-----------------------------------------------------------------------------IMPLEMENT_DYNAMIC (CDockControlBar, CAcUiDockControlBar)BEGIN_MESSAGE_MAP(CDockControlBar, CAcUiDockControlBar)ON_WM_CREATE()ON_WM_SYSCOMMAND()ON_WM_SIZE()ON_WM_CLOSE()END_MESSAGE_MAP()//-----------------------------------------------------------------------------//----- CDockControlBar *pInstance = new CDockControlBar;//----- pInstance->Create (acedGetAcadFrame (), "My title bar") ;//----- pInstance->EnableDocking (CBRS_ALIGN_ANY) ;//----- pInstance->RestoreControlBar () ;//-----------------------------------------------------------------------------static CLSID clsCDockControlBar = {0xeab78c04, 0x2194, 0x47ad, {0xa4, 0xf2, 0xad, 0xca, 0x3e, 0x3b, 0xb6, 0x3c}} ;//-----------------------------------------------------------------------------CDockControlBar::CDockControlBar () : CAcUiDockControlBar() {mChildDlg = NULL;}//-----------------------------------------------------------------------------CDockControlBar::~CDockControlBar () {}//-----------------------------------------------------------------------------#ifdef _DEBUG//- Please uncomment the 2 following lines to avoid linker error when compiling//- in release mode. But make sure to uncomment these lines only once per project//- if you derive multiple times from CAdUiDockControlBar/CAcUiDockControlBar//- classes.//void CAdUiDockControlBar::AssertValid () const {//}#endif//-----------------------------------------------------------------------------BOOL CDockControlBar::Create (CWnd *pParent, LPCTSTR lpszTitle) {CString strWndClass ;strWndClass =AfxRegisterWndClass (CS_DBLCLKS, LoadCursor (NULL, IDC_ARROW)) ;CRect rect (0, 0, 150, 200) ;if (!CAcUiDockControlBar::Create (strWndClass, lpszTitle, WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,rect, pParent, 0))return (FALSE) ;SetToolID (&clsCDockControlBar) ;// TODO: Add your code herereturn (TRUE) ;}//-----------------------------------------------------------------------------//----- This member function is called when an application requests the window be//----- created by calling the Create or CreateEx member functionint CDockControlBar::OnCreate (LPCREATESTRUCT lpCreateStruct) {if ( CAcUiDockControlBar::OnCreate (lpCreateStruct) == -1 )return (-1) ;//----- Point to our resourceCAcModuleResourceOverride resourceOverride;//----- Create it and set the parent as the dockctrl barmChildDlg = new CDockControlBarChildDlg;mChildDlg->Create (IDD_DOCKCONTROLBAR, this) ;//----- Move the window over so we can see the control linesmChildDlg->MoveWindow (0, 0, 150, 100, TRUE) ;return (0) ;}//-----------------------------------------------------------------------------void CDockControlBar::SizeChanged (CRect *lpRect, BOOL bFloating, int flags) { // If validif (::IsWindow (mChildDlg->GetSafeHwnd ())){//----- Always point to our resource to be safeCAcModuleResourceOverride resourceOverride ;//----- Then update its window size relativelymChildDlg->SetWindowPos (this, lpRect->left + 4, lpRect->top + 4, lpRect->Width (), lpRect->Height (), SWP_NOZORDER) ;}}//-----------------------------------------------------------------------------CSize CDockControlBar::CalcFixedLayout( BOOL bStretch , BOOL bHorz ){//如果当前处于浮动状态if (IsFloating()){CRect m_r1;GetClientRect(m_r1);//m_childDlg->SetWindowPos (this, m_r1.left+2, m_r1.top, m_r1.Width (), m_r1.Height (), SWP_NOZORDER) ;return CSize(150,450);}else//处于固定状态{return CSize(150,450);}}//-----------------------------------------------------------------------------//----- Function called when user selects a command from Control menu or when user//----- selects the Maximize or the Minimize button.void CDockControlBar::OnSysCommand (UINT nID, LPARAM lParam) {CAcUiDockControlBar::OnSysCommand (nID, lParam) ;}//-----------------------------------------------------------------------------//----- The framework calls this member function after the window's size has changedvoid CDockControlBar::OnSize (UINT nType, int cx, int cy) {CAcUiDockControlBar::OnSize (nType, cx, cy) ;// If validif (::IsWindow (mChildDlg->GetSafeHwnd ())){//----- Always point to our resource to be safeCAcModuleResourceOverride resourceOverride ;//----- then update its window position relativelymChildDlg->MoveWindow (0, 0, cx, cy) ;}}void CDockControlBar::OnClose(){// TODO: Add your message handler code here and/or call defaultif (mChildDlg != NULL){DestroyWindow();}CAcUiDockControlBar::OnClose();}DockControlBarChildDlg.h// (C) Copyright 2002-2007 by Autodesk, Inc.//// Permission to use, copy, modify, and distribute this software in// object code form for any purpose and without fee is hereby granted,// provided that the above copyright notice appears in all copies and// that both that copyright notice and the limited warranty and// restricted rights notice below appear in all supporting// documentation.//// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE// UNINTERRUPTED OR ERROR FREE.//// Use, duplication, or disclosure by the U.S. Government is subject to// restrictions set forth in FAR 52.227-19 (Commercial Computer// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)// (Rights in Technical Data and Computer Software), as applicable.////-----------------------------------------------------------------------------//----- DockControlBarChildDlg.h : Declaration of the CDockControlBarChildDlg//-----------------------------------------------------------------------------#pragma once//-----------------------------------------------------------------------------#include"acui.h"//-----------------------------------------------------------------------------class CDockControlBarChildDlg : public CAcUiDialog {DECLARE_DYNAMIC (CDockControlBarChildDlg)public:CDockControlBarChildDlg (CWnd *pParent =NULL, HINSTANCE hInstance =NULL) ;enum { IDD = IDD_DOCKCONTROLBAR};public:CMFCOutlookBar m_wndOutlookBar;//CMFCOutlookBarPane m_wndOutlookPane;CTreeCtrl m_wndTree; //结构分析CTreeCtrl m_wndTree1;//工具箱CTreeCtrl m_wndTree2;//绘图CImageList Treelist;protected:virtual void DoDataExchange (CDataExchange *pDX) ;virtual BOOL OnCommand (WPARAM wParam, LPARAM lParam) ;protected:afx_msg LRESULT OnAcadKeepFocus (WPARAM wParam, LPARAM lParam) ;afx_msg void OnDblClkTree(NMHDR* pNMHDR, LRESULT* pResult);afx_msg void OnDblClkTree1(NMHDR* pNMHDR, LRESULT* pResult);afx_msg void OnDblClkTree2(NMHDR* pNMHDR, LRESULT* pResult); protected:DECLARE_MESSAGE_MAP()public:virtual BOOL OnInitDialog();BOOL CreateTreeControl();BOOL CreateTreeControl1();BOOL CreateTreeControl2();} ;DockControlBarChildDlg.cpp// (C) Copyright 2002-2007 by Autodesk, Inc.//// Permission to use, copy, modify, and distribute this software in// object code form for any purpose and without fee is hereby granted,// provided that the above copyright notice appears in all copies and// that both that copyright notice and the limited warranty and// restricted rights notice below appear in all supporting// documentation.//// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE// UNINTERRUPTED OR ERROR FREE.//// Use, duplication, or disclosure by the U.S. Government is subject to// restrictions set forth in FAR 52.227-19 (Commercial Computer// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)// (Rights in Technical Data and Computer Software), as applicable.////-----------------------------------------------------------------------------//- DockControlBar.cpp : Implementation of CDockControlBarChildDlg//-----------------------------------------------------------------------------#include"StdAfx.h"#include"resource.h"#include"DockControlBarChildDlg.h"#include"My_SubFunctions.h"//-----------------------------------------------------------------------------#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif//-----------------------------------------------------------------------------IMPLEMENT_DYNAMIC (CDockControlBarChildDlg, CAcUiDialog)BEGIN_MESSAGE_MAP(CDockControlBarChildDlg, CAcUiDialog)//{{AFX_MSG_MAP(CDockControlBarChildDlg)ON_MESSAGE(WM_ACAD_KEEPFOCUS, OnAcadKeepFocus) // Needed for modeless dialog.//}}AFX_MSG_MAPON_NOTIFY(NM_DBLCLK, ID_VIEW_TASKPANE_CTREE, OnDblClkTree)ON_NOTIFY(NM_DBLCLK, ID_VIEW_TASKPANE_CTREE1, OnDblClkTree1)ON_NOTIFY(NM_DBLCLK, ID_VIEW_TASKPANE_CTREE2, OnDblClkTree2)END_MESSAGE_MAP()//-----------------------------------------------------------------------------CDockControlBarChildDlg::CDockControlBarChildDlg (CWnd *pParent/*=NULL*/, HINSTANCE hInstance/*=NULL*/) : CAcUiDialog (CDockControlBarChildDlg::IDD, pParent, hInstance) { //{{AFX_DATA_INIT(CDockControlBarChildDlg)//}}AFX_DATA_INIT}//-----------------------------------------------------------------------------void CDockControlBarChildDlg::DoDataExchange (CDataExchange *pDX) {CAcUiDialog::DoDataExchange (pDX) ;//{{AFX_DATA_MAP(CDockControlBarChildDlg)//}}AFX_DATA_MAP}//-----------------------------------------------------------------------------//- Needed for modeless dialogs to keep focus.//- Return FALSE to not keep the focus, return TRUE to keep the focusLRESULT CDockControlBarChildDlg::OnAcadKeepFocus (WPARAM wParam, LPARAM lParam) { return (TRUE) ;}//-----------------------------------------------------------------------------//- As this dialog is a child dialog we need to disable ok and cancelBOOL CDockControlBarChildDlg::OnCommand (WPARAM wParam, LPARAM lParam) { switch ( wParam ) {case IDOK:case IDCANCEL:return (FALSE) ;}return (CAcUiDialog::OnCommand (wParam, lParam)) ;}BOOL CDockControlBarChildDlg::OnInitDialog(){CAcUiDialog::OnInitDialog();// TODO: Add extra initialization hereCMFCOutlookBarTabCtrl::EnableAnimation ();if (!m_wndOutlookBar.Create (_T("Shortcuts"), this,CRect(0,0,150-5,450-30),ID_VIEW_OUTLOOKBAR, WS_CHILD | WS_VISIBLE | CBRS_LEFT)) {TRACE0("Failed to create outlook bar\n");return FALSE; // fail to create}CMFCOutlookBarTabCtrl* pShortcutsBarContainer = DYNAMIC_DOWNCAST(CMFCOutlookBarTabCtrl, m_wndOutlookBar.GetUnderlyingWindow ());if (pShortcutsBarContainer == NULL){TRACE0("Cannot get outlook bar container\n");return FALSE;}//***************************************if (!CreateTreeControl()){TRACE0("Failed to create the custom window\n");return -1; // fail to create}pShortcutsBarContainer->AddTab(&m_wndTree, _T("结构分析"), 0, FALSE);//***************************************if (!CreateTreeControl1()){TRACE0("Failed to create the custom window\n");return -1; // fail to create}pShortcutsBarContainer->AddTab(&m_wndTree1, _T("工具箱"), 1, FALSE);//***************************************if (!CreateTreeControl2()){TRACE0("Failed to create the custom window\n");return -1; // fail to create}pShortcutsBarContainer->AddTab(&m_wndTree2, _T("绘图"), 2, FALSE);return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE}BOOL CDockControlBarChildDlg::CreateTreeControl(){Treelist.Create(16,16,ILC_COLOR32|ILC_MASK,0,0);Treelist.Add(::AfxGetApp()->LoadIconW(IDI_ICON_XY));Treelist.Add(::AfxGetApp()->LoadIconW(IDI_ICON_XY));CRect rectDummy (0, 0, 0, 0);const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES |TVS_LINESATROOT | TVS_HASBUTTONS;if(!m_wndTree.Create (dwTreeStyle, rectDummy, this, ID_VIEW_TASKPANE_CTREE)){TRACE0("Failed to create the custom window\n");return FALSE;}m_wndTree.SetImageList(&Treelist,TVSIL_NORMAL);HTREEITEM tree;m_wndTree.ModifyStyle(NULL,TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);tree=m_wndTree.InsertItem(_T("结构静力计算"),0,0); //"0"为项的图像在tree view控件的图像列表中的索引。
