快速业务通道

在ActiveX控件中引入窗体技术

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
this, AFX_IDW_PANE_FIRST, NULL);
 return 0;
}
void CHelloCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) {
 // 定位Hello对话框
 m_helloFormView.MoveWindow(rcBounds,TRUE);
}

三、引入Document/View结构技术

下面介绍在制作ActiveX控件时引入Document/View技术,制作步骤如下:

在上面工作的基础上,在Hello工程中用ClassWizard添加一新类CPrintFrame,取其父类为CFrameWnd;

在PrintFrame.h中将CPrintFrame的构造函数CPrintFrame()和析构函数virtual ~CPrintFrame()从protected改为public;

在Hello工程中用ClassWizard添加一新类CPrintView,取其父类为CView;

在PrintView.h中将CPrintView的构造函数CPrintView()和析构函数virtual ~CPrintView()从protected改为public;

在Hello工程中用ClassWizard添加一新类CPrintDoc,取其父类为CDocument;

在PrintDoc.h中将CPrintDoc的构造函数CPrintDoc()和析构函数virtual ~CPrintDoc()从protected改为public;

在Hello工程中用ClassWizard添加一新类CPrintThread,取其父类为CWinThread;

在HelloCtrl.h文件中为CHelloCtrl类添加成员变量CPrintThread* m_pPrintThread,确认在HelloCtrl.h中已加入语句#include "PrintThread.h";

void CHelloCtrl::DoHello() { // 创建打印线程 m_pPrintThread = (CPrintThread*) AfxBeginThread(RUNTIME_CLASS(CPrintThread), THREAD_PRIORITY_NORMAL, CREATE_SUSPENDED, NULL); m_pPrintThread- >ResumeThread();}

在PrintThread.h中添加新成员变量

CPrintDoc* m_pPrintDoc和CPrintFrame* m_pPrintFrame,并在构造函数和析构函数中完成对它们的初始设置和清除,确认在PrintThread.h中已加入语句#include "PrintDoc.h"和#include "PrintFrame.h";

CPrintThread::CPrintThread(){
 m_pPrintDoc=NULL;
 m_pPrintFrame=NULL;
}
CPrintThread::~CPrintThread(){
 if (m_pPrintDoc!=NULL)
  delete m_pPrintFrame;
 if (m_pPrintFrame!=NULL)
  delete m_pPrintDoc;
}

在PrintThread.cpp的CPrintThread::InitInstance中,进行创建窗体CPrintFrame,确认在PrintThread.cpp中已加入语句#include "PrintFrame.h";

BOOL CPrintThread::InitInstance(){
 // 创建文档/视图框架
 CPrintFrame* pFrame = new CPrintFrame;
 m_pMainWnd = pFrame;
 m_pPrintFrame=pFrame;
 m_pPrintDoc=new CPrintDoc;
 CCreateContext context;
 context.m_pCurrentDoc = m_pPrintDoc;
 context.m_pNewViewClass = RUNTIME_CLASS(CPrintView);
 pFrame- >Create(NULL,"打印主窗体", WS_OVERLAPPEDWINDOW,CRect(0,0,100,100), NULL,NULL,0,&context);
 pFrame- >InitialUpdateFrame(m_pPrintDoc, TRUE);
 return TRUE;
}

在PrintView.h的CPrintView中,添加成员函数CPrintDoc* GetDocument(),确认在PrintView.h中已加入语句#include "PrintDoc.h";

CPrintDoc* CPrintView::GetDocument(){
 ASSERT(m_pDocument- >IsKindOf (RUNTIME_CLASS(CPrintDoc)));
 return (CPrintDoc*)m_pDocument;
}

四、实现ActiveX打印预览技术

下面介绍利用上面的技术成果来实现ActiveX的打印预览技术,实现步骤如下:

在上面工作的基础上,用ClassWizard对CPrintView类实现OnPreparePrinting函数,如下:

BOOL CPrintView::OnPreparePrinting(CPrintInfo* pInfo) { // 准备打印 return DoPreparePrinting(pInfo);}

用ClassWizard在Automation页中为CHelloCtrl添加一方法void DoPreview(),外部名亦为DoPreview;

void CHelloCtrl::DoPreview

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号