文档/视图应用程序打印
在MFC的文档/视图结构中内置了功能强大的打印和打印预览功能,大大的简化了用户对于打印的编辑。用户在编写打印程序时,需要重载OnDraw函数,通过该函数可以将图像输出到屏幕上,在打印时,用户选择“文件”/“打印”命令,窗口将把打印机的的设备上下文传递给OnDraw函数,从而实现在打印机上绘制图像。
在OnDraw函数中调用IsPrinting函数,IsPrinting函数用于确定正在使用的设备上下文是否用于打印。
语法:
BOOL IsPrinting( ) const;
返回值:使用打印机设备上下文时返回非零值。
例如,文档/视图应用程序打印,程序设计步骤如下:
(1)创建一个基于文档/视图结构的应用程序。
(2)在视图类的头文件中声明变量,代码如下。
int screenx,screeny; //屏幕每英寸像素数
int printx,printy; //打印机每英寸像素数
double ratex,ratey; //打印机与屏幕的像素比率
CFont m_Font; //文本字体
CString str[6]; //保存本文的数组
(3)添加PrintText函数,在该函数中设置打印文本。
(4)重载OnBeginPrinting函数,在该函数中获得打印机每英寸像素数,并技术打印机与屏幕的像素比率,代码如下。
void CPrintView::OnBeginPrinting(CDC* pDC, CPrintInfo* /*pInfo*/)
{
//获取打印机每英寸像素数
printx =pDC->GetDeviceCaps(LOGPIXELSX);
printy =pDC->GetDeviceCaps(LOGPIXELSY);
//计算打印机与屏幕的比率
ratex = (double)printx /screenx;
ratey = (double)printy /screeny;
}
注意:打印机的打印分辨率与计算机的屏幕分辨率是不同的。为了将窗口的中信息原样输出到打印机中,我们需要处理计算打印机与屏幕分辨率的比率。
(5)重载OnDraw函数,在应用程序窗口中绘制打印文本,代码如下。
void CPrintView::OnDraw(CDC* pDC)
{
CPrintDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//获取屏幕每英寸像素数
screenx =pDC->GetDeviceCaps(LOGPIXELSX);
screeny =pDC->GetDeviceCaps(LOGPIXELSY);
PrintText(); //设置打印文本
if(pDC->IsPrinting()) //判断是否打印
{
m_Font.CreatePointFont(int(150*ratex),"宋体"); //创建字体
pDC->SelectObject(&m_Font); //将字体选入设备上下文
for(int i=0;i<6;i++)
{
pDC->TextOut(int(50*ratex),int((30+i*40)*ratey),str[i]); //绘制文本
}
}
else //不打印时
{
m_Font.CreatePointFont(150,"宋体"); //创建字体
pDC->SelectObject(&m_Font); //将字体选入设备上下文
for(int i=0;i<6;i++)
{
pDC->TextOut(50,30+i*40,str[i]); //绘制文本
}
}
m_Font.DeleteObject(); //释放字体
}
程序运行效果如图1所示。
.jpg)
图1 文档/视图应用程序打印