化工设备制造计算机辅助设计系统规划.doc_第1页
化工设备制造计算机辅助设计系统规划.doc_第2页
化工设备制造计算机辅助设计系统规划.doc_第3页
化工设备制造计算机辅助设计系统规划.doc_第4页
化工设备制造计算机辅助设计系统规划.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

化工设备制造计算机辅助设计系统 7化工设备制造计算机辅助设计系统一、 PVITEM类l 共用信息long m_ID /在Doc中存档位置号int m_Type / 在构造函数中用来指明构造类型如:PV_D_SHELLint m_CalcType /计算类型Cstring m_Name /零件名称void m_pItem / 指向具体的专用类的指针class m_ResultFile / 计算结果的格式化m_ID m_Type m_CalcType m_Name m_Iconm_ResultFilem_pitem如:PV_DP_SHELL类中包含以下结构:通用信息结构 struct general 零件信息结构 struct part零件专用信息结构 struct cylinder l 通用类信息:设计压力,设计温度,操作介质密度,试验介质密度,操作介质高度,试验介质高度,水压试验或气压试验选择。l 零件信息结构:元件名称,件号,备注。l 零件专用信息结构:零件的几何参数,如筒体长度,名义厚度,材料,内外壁温,腐蚀余度,焊缝系数。二、 在PVITEM类的头文件中包含各种具体类的头文件如:PV_DP_Shell,PV_DP_Vertex等等,以及符号定义文件PV_D_Shell等。三、 PVITEM构造函数的关键是具有多路开关的构造函数,其形势如下: PVItem:PVItem(int type,long id)/这是构造函数的另一个版本m_ID=id;m_Data.Format(%s%ld,Item,id);m_Result=_T(可以在这里加说明。);m_ResultFile.Format(%s%ld.%s,rst,id,rst);m_CalcType=0;m_Type=type;switch(type)case PV_D_CYLINDER:m_Name.Format(%s%ld,筒体,id);m_pItem=(void*)new PV_DP_Shell;/这里根据需要构造了实际m_Icon=18; /不同的类;显然,这里PV_DP_break; /Shell已在头文件里定义成具体shell类的对象。case PV_D_VERTEX_HEAD:m_Name.Format(%s%ld,凸形封头,id);m_pItem=(void*)new PV_DP_Vertex;m_Icon=3;break;四、 文档设计1本程序采用一个文档来存储,这样,在打开已有文件时,就可以从一个文档文件读入所有数据。并且此文档从多文档CMultiDocument派生,这样,就可以在应用中打开多个工程文件。2 为了类的存储,使用集合类Carraym_Items;每一专用PVItem将成为m_Items的一个元素而进行存储。3项目信息Cstring m_Project;/用于存储项目名称long m_MaxId;/用于存储项目的最大子项数long m_DispId;/用于记录显示子类项的id值long m_Version/本程序的版本号4成员函数int FindItem(long Id)/找到文档存储的PVItem子类,返回下标;void AddItem(PVItem &);/在文档中加入新的PVItem子类五、视设计、计算结果的存储与显示由于应用程序的主视图是从CTreeView类派生出来的,所以计算结果不能在主视图中来显示。要另外建立一个视类用来显示和存储计算结果。那么,主要问题是如何使两个视类使用同一文档,即如何访问文档的问题。可用以下办法进行:(假定工程名称是Wx)1用VC+的AppWizard产生一个基于多文档、CTreeView的应用程序框架。其中包括了基于CChildWnd的类.WxChildFrame和WxView类;2用ClassWizard产生一个基于Cview类的新类NewView,但是在选择头文件名和完成文件名时仍选择WxView.h和WxView.cpp;3. 在WxView的头文件中包括WxDoc.h,并在NewView的头文件中加入以下内容:public: WxDoc * GetDocument();并在头文件的后面加入以下内容:#ifndef _DEBUG / debug version in wxsplitView.cppinline WxDoc* NewView:GetDocument() return (WxDoc*)m_pDocument; #endif4. 在完成文件中加入以下内容:WxDoc* NewView:GetDocument() / non-debug version is inline ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(WxDoc);return (WxDoc*)m_pDocument;5. 改写NewView的OnDraw函数:WxDoc * pDoc=GetDocument();这样就可以在该视中显示WxDoc中的有关内容了。六、在WxChildFrame中,重载成员函数OnCreateClient( )BOOL WxChildFrame:OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) / TODO: Add your specialized code here and/or call the base classif(!m_splitter1.CreateStatic(this,1,2)TRACE0(Failed to CreateStaticSplittern);return FALSE;if(!m_splitter1.CreateView(0,0,pContext-m_pNewViewClass,CSize(130,50),pContext)TRACE0(Failed to Create first panen);return FALSE;if(!m_splitter1.CreateView(0,1,RUNTIME_CLASS(NewView),CSize(0,0),pContext)TRACE0(Failed to Create the second viewn);return FALSE;return TRUE;七、 在WxChildFrame的头文件中,定义分隔器; CSplitterWnd m_splitter1;关于一个文档多个视类的编程技术用一个文档中的不同部分分别在不同的视中出现,如一个视显示文档的题目与摘要,而用另一个视显示同一文档的内容,一在应用程序中建立两个文档模板,用同一文档分别与两个视类相关联;pDocTemplate1 = new CMultiDocTemplate(IDR_DOCVIETYPE1,RUNTIME_CLASS(CDocViewDoc),RUNTIME_CLASS(CChildFrame),/ custom MDI child frameRUNTIME_CLASS(SecondView);AddDocTemplate(pDocTemplate1);pDocTemplate2 = new CMultiDocTemplate(IDR_DOCVIETYPE2,RUNTIME_CLASS(CDocViewDoc),RUNTIME_CLASS(CChildFrame), / custom MDI child frameRUNTIME_CLASS(ThirdView);AddDocTemplate(pDocTemplate2);在这里,pDocTemplate1和pDpcTemplate2都用的同一个CdocViewDoc文档。其中,pDocTemplate1做为程序的主界面。二当在主界面中调用第二个视时,也就是要显示文档的另一部分内容时,用以政的方法: CChildFrame * Frame;CDocViewDoc * pDoc=(CDocViewDoc *)GetDocument();CDocViewApp* pApp=(CDocViewApp*) AfxGetApp(); Frame=(CChildFrame*)pApp-pDocTemplate1-CreateNewFrame( pDoc, (CFrameWnd* )Frame);pApp-pDocTemplate1-InitialUpdateFrame( Frame, pDoc );Frame-MDIMaximize( );l /CreateNewFrame uses the CRuntimeClass objects passed to the constructor to create a new frame window with a view and document attached. If the pDoc parameter is NULL, the framework outputs a TRACE message.l /Call IntitialUpdateFrame after creating a new frame with CreateNewFrame. Calling this function causes the views in that frame window to receive their OnInitialUpdate calls. Also, if there was not previously an active view, the primary view of the frame window is made active;三在第二个视类中,可以在其OnDraw函数中,从文档取出感兴趣的东西显示在屏幕上。因为该视的文档与第一个视用的同一个文档,所以显示的东西是同一个文档的不同部分的内容,而不是同一文档类不同的文档的内容。如何打印打印几乎是每个应用程序必不可少的一个功能。一 在程序的MESSAGE_MAP段加入以下消息响应:ON_COMMAND(ID_FILE_PRINT, CScrollView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView:OnFilePrintPreview)二 在该视类中加载基类虚函数:a) OnPreparePrinting(CPrintInfo * pInfo)b)OnBeginPrinting(CDC * pDC,CprintInfo * pInfo)c)OnEndPrinting(CDC * pDC,CprintInfo * pInfo)d)OnPrint(CDC * pDC,CprintInfo * pInfo)解释:a)主要任务是根据传来的pInfo结构来设置要打印的总页数:pInfo-SetMaxPage(5);return DoPreparePrinting(pInfo);/这是必须调用的函数: b)主要任务是在开始打印前设置CDC的绘制用的资源,如字体,画刷等。c)主要任务是打印结束后清理在b)中设置的CDC系统资源.d)实现每一页具体的打印与预显。这要根据从传来的pInfo-m_mCurPage的值来决定打印什么,并选择所要用的字体,画刷等等。这些字体画刷等系统资源已在b)中设定了的。如何选择字体(1)先定义字体注册结构:LOGFONT lgft;(2)定义Cfont指针对象: Cfont *TempFont;(3)用memset(&lgft,0,sizeof(lgft);/先给LOGFONT结构分配内存(4)取出当前字体,TempFont=pDC-GetCurrentFont();TempFont已指向当前系统秘用的字体了。(5)用Cfont的基类CGDIObject的成员数GetObject(int nCount ,LPVOID lpObject)其中:lpObject是void型指针,是可以具体定义为GDI的某些对象以及结构:TempFont-GetObject(sizeof(lgft),&lgft);/这样,lgft就储存了当前系统字体的LOGFONT的全部内容(6)利用lgft 来改变一些字体的性质 lgft.lfHeight=35;/改变字高 strcpy(lgft.lfFaceName,宋体);/确定字体(7)用lgft 来建立新字体 NewFont=new CFont;/创建NewF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论