现在的位置: 首页 > 综合 > 正文

打印”对话框进行打印

2017年08月05日 ⁄ 综合 ⁄ 共 2221字 ⁄ 字号 评论关闭


打印"对话框提供了对打印机接口界面的支持,用户可以使用"打印"对话框进行打印。CPrintDialog类对"打印"对话框进行了封装,可以通过构造函数CPrintDialog构造"打印"对话框。

语法格式如下:

CPrintDialog( BOOL bPrintSetupOnly, 
DWORD dwFlags = PD_ALLPAGES | PD_USEDEVMODECOPIES 
| PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | 
PD_NOSELECTION, CWnd* pParentWnd = NULL );

bPrintSetupOnly:为TRUE,表示创建"打印设置"对话框;为FALSE,表示创建"打印"对话框。

dwFlags:自定义对话框的一组标记。

pParentWnd:标识"打印"对话框的父窗口指针。

"打印"对话框的常用函数如表6.11所示。

表6.11  "打印"对话框的常用函数

    

   

DoModal

用于显示“打印”对话框

GetDeviceName

获取当前所选打印设备的名称

GetPrinterDC

获取打印设备上下文句柄

GetPortName

获取当前所选打印机端口

GetDriverName

获取当前打印机的驱动程序名称

 

例6.10  下面使用"打印"对话框进行打印。程序设计步骤如下:(实例位置:光盘\TM\sl\6\6)

(1)创建一个基于对话框的应用程序,将对话框的Caption属性修改为"使用'打印'对话框进行打印"。

(2)向对话框中添加一个按钮控件。

(3)在对话框头文件中声明变量,代码如下。

CString str[6];          //保存打印字符串的字符串数组
CFont font;          //字体对象
int screenx,screeny;         //窗口每英寸像素数
int printx,printy;          //打印机每英寸像素数
double ratex,ratey;         //打印机与屏幕的像素比

(4)定义一个自定义函数DrawText,用于绘制打印和预览的文本。代码如下:

void CPrintDialogDlg::DrawText(CDC *pDC, BOOL isprinted)  //自定义函数
{
CFont font;
if(!isprinted)           //预览
{
ratex = 1;          //当预览时设置比率为1
ratey = 1;          //当预览时设置比率为1
}
else            //判断是打印
{
pDC->StartDoc("printinformation");      //开始打印
}
font.CreatePointFont(120,"宋体",pDC);     //创建字体
for(int i=0;i<6;i++)         //设置循环
{
pDC->SelectObject(&font);      //将字体选入设备上下文
pDC->TextOut(int(50*ratex),int((50+i*30)*ratey),str[i]); //打印文本
}
if(isprinted)          //判断是打印
{
pDC->EndDoc();        //结束打印
}
}

(5)在OnPaint函数中获取屏幕每逻辑英寸的像素值并进行预览的绘制。代码如下:

CDC* pDC = GetDC();        //获得屏幕上下文
screenx = pDC->GetDeviceCaps(LOGPIXELSX);   //获得屏幕像素
screeny = pDC->GetDeviceCaps(LOGPIXELSY);   //获得屏幕像素
DrawText(pDC,FALSE);        //绘制打印预览

(6)处理WM_CTLCOLOR消息,在该消息中将对话框的背景颜色改为白色。

(7)处理"打印"按钮的单击事件,创建"打印"对话框进行打印,代码如下。

void CPrintDialogDlg::OnPrint()        //"打印"按钮单击事件的处理函数
{
DWORD dwflags=PD_ALLPAGES | PD_NOPAGENUMS | PD_USEDEVMODECOPIES
| PD_SELECTION | PD_HIDEPRINTTOFILE;    //设置"打印"对话框属性
CPrintDialog dlg(FALSE,dwflags,NULL);     //构造"打印"对话框
if(dlg.DoModal()==IDOK)        //显示"打印"对话框
{
CDC dc;          //声明设备上下文
dc.Attach(dlg.GetPrinterDC());      //获得打印机上下文
printx = dc.GetDeviceCaps(LOGPIXELSX);   //获得打印机像素
printy = dc.GetDeviceCaps(LOGPIXELSY);   //获得打印机像素
ratex  = (double)(printx)/screenx;     //计算屏幕和打印机像素比率
ratey  = (double)(printy)/screeny;      //计算屏幕和打印机像素比率
DrawText(&dc,TRUE);       //绘制打印文本
}
}

实例的运行结果如图6.29所示

抱歉!评论已关闭.