打印"对话框提供了对打印机接口界面的支持,用户可以使用"打印"对话框进行打印。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所示