2024年6月12日发(作者:)
使用MFC实现打印功能
如果程序不是文档视图结构的,我们要使用MFC来进行打印,可以通过建立一个虚
拟的文档视图结构来进行打印。MFC的打印的强大功能是在CView里提供的,而CView
类的对象是一个子窗口,它必须是某一个框架窗口的子窗口,而在对话框程序中,我们只
需要打印,而不需要显示这个框架窗口和视图。我们以按下按钮"打印"来执行打印程序,
例如按钮为ID为IDC_PNT,消息相应函数为OnPnt(),即:
ON_BN_CLICKED(IDC_PNT, OnPnt);
需要在OnPnt中建立一个框架窗口,同时使某个CView类的对象为该窗口的子窗口。
因此需要建立两个类,一个为框架窗口类CPrintFrame,另一个为CPrintView。在新建一
个用于打印的虚拟框架窗口时,需要将执行打印的对话框的指针传给框架窗口,这以便在
对话框来响应WM_BEGIN_PRINTING和WM_END_PRINTING消息,使对话框可以完成
打印的初始化和释放操作。在执行一个打印任务时,将打印的流程交给CView来进行,而
这个CView是虚拟的,只是用来完成打印一些操作,其它内容则完全不负责处理,而当要
执行CView::OnPrint时,则又将处理的具体内容传回到对话框,而对话框则只需要响应
WM_MY_PRINT消息即可:
pFrame->m_pCallerDlg->SendMessage(WM_MY_PRINT,(WPARAM)
(LPARAM) pInfo);
pDC,
使打印的具体处理又传回到对话框中,使开发人员根据具体的需要写WM_MY_PRINT
的处理函数就可以实现打印,而CView::OnPrint(CDC* pDC, CPrintInfo* pInfo)的参数也
从WM_MY_PRINT的消息参数传出来,在用户的对话框程序中,需要写的代码就很少,主
要有以下几个步骤:
1. 建立一个CPrintFrame的对象,设该对象的指针为pFrame,并将对话框的指针传给
该对象的m_pCallerDlg,即pFrame->m_pCallerDlg = this;
2. 调用对象的Create函数创建框架窗口;例如pFrame->Create(NULL,"频谱打印
",WS_OVERLAPPEDWINDOW,CRect(0,0,0,0));
3. 如果要执行打印,则调用pFrame->m_pView->OnMyPrint();
4. 如果要执行打印预览,则调用:
pFrame->m_pView->OnMyPrintPreview();
例如:
void CDlgPrintDlg::OnPrint() //执行打印功能
{
CPrintFrame *pFrame = new CPrintFrame;
pFrame->m_pCallerDlg = this;
pFrame->Create(NULL,"Curve
发布评论