网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
VC++对话框程序打印及打印预览的实现
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
Printing分配的对象1.用MFC应用向导创建对话框应用程序,设主对话框类为CMyPrintPreviewDlg,在主对话框上放一按钮,(标题:打印预览,ID:IDC_BUTTON1),用类向导增加其BN_CLICKED的消息响应函数OnButton1生成打印预览界面

void CMyPrintPreviewDlg::OnButton1()

{

CMyFrame* pf=new CMyFrame(this);// TODO: Add your control notification handler code here

}

2、增加新类:

用ClassWizard新建CMyFrame类(基类CFrameWnd),功能上相当于文档/视图的应用程序的框架窗口类

用ClassWizard新建CMyView类(基类CScrollView),功能上相当于文档/视图的应用程序的视图类。

增加CMyPreviewView类(基类CPreviewView,注意在头其定义头文件中加入包含afxpriv.h),用于打印预览界面的视图类。

3、对新生成的各类修改如下:

CMyFrame类:

①增加公有数据成员

CMyPrintPreviewDlg* m_pOldWnd:用于保存主对话框对象;

CMyView* m_pView:用于保存视图类对象;

②重载构造函数,保存对主对话框对象指针,创建窗口

CMyFrame::CMyFrame(CMyPrintPreviewDlg* pOld)

{

m_pOldWnd= pOld;

if(!Create(NULL,“打印预览”, WS_OVERLAPPEDWINDOW|FWS_ADDTOTITLE,CRect(200,200,500,500)))

TRACE0(“Failed to create view window\n”);

}

③修改析构函数,让主对话框显示

CMyFrame::~CMyFrame()

{m_pOldWnd->ShowWindow(SW_SHOW);

}

④用ClassWizard增加WM_Create消息处理函数,关联CMyView视图对象;调用其OnFilePrintPreview函数进行打印预览(若要直接打印,可直接向其发送消息);隐藏主对话框。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

return -1;

CCreateContext context;

context.m_pNewViewClass = RUNTIME_CLASS(CMyView);

context.m_pCurrentFrame = this;

context.m_pCurrentDoc = NULL;

context.m_pLastView = NULL;

m_pView = STATIC_DOWNCAST(CMyView, CreateView(&context));

if(m_pView != NULL)

{

m_pView->ShowWindow(SW_SHOW);

SetActiveView(m_pView);

}

SetIcon(m_pOldWnd->GetIcon(FALSE),FALSE);

SetIcon(m_pOldWnd->GetIcon(TRUE),TRUE);

ShowWindow(SW_MAXIMIZE);

CWinApp *pApp=AfxGetApp();

pApp->m_pMainWnd=this;

m_pView->OnFilePrintPreview();

//m_pView->SendMessage(WM_COMMAND, ID_FILE_PRINT);//直接打印

m_pOldWnd->ShowWindow(SW_HIDE);

return 0;

}

修改CMyView类

①修改构造函数:将坐标射模式置为缺省模式。

CMyView::CMyView()

{

m_nMapMode = MM_TEXT;

}

②增加消息映射实现打印。

ON_COMMAND(ID_FILE_PRINT,CView::OnFilePrint)

③重载虚函数OnPreparePrinting,调用DoPreparePrinting生成用于打印或打印预览的设备描述表。

BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)

{

return DoPreparePrinting(pInfo);

}

④增加公有函数OnFilePrintPreview,调用DoPrintPreview实现打印预览,该函数需要传入四个参数:打印预览工具条资源ID,执行打印及打印预览的视图对象指针,打印预览界面视图类的 CRuntimeClass指针,打印预览状态类CPrintPreviewState对象指针。

void CMyView::OnFilePrintPreview( )

{

CPrintPreviewState* pState = new CPrintPreviewState;

pState->lpfnCloseProc =_AfxMyPreviewCloseProc;//设置打印预览窗口关闭时的调用函数;

if(!DoPrintPreview(AFX_IDD_PREVIEW_TOOLBAR, this,RUNTIME_CLASS(CMyPreviewView), pState))

{

TRACE0(“Error: DoPrintPreview failed.\n”);

AfxMessageBox(AFX_IDP_COMMAND_FAILURE);

delete pState;

}

}

⑤在Myview.cpp文件中增加全局函数,_AfxMyPreviewCloseProc,当单击打印预览窗口关闭按钮时被调用。

BOOL CALLB

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号