vc++中如何实现打印功能的 [原创 2006-02-21 20:35:28 | 发表者: 鸽子情缘]
我们只需在源代码中加入以下几行代即可,如下: void CPrintSameView::OnPrepareDC (CDC* pDC, CPrintInfo* pInfo) { CView::OnPrepareDC(pDC, pInfo);pDC->SetMapMode(MM_ANISOTROPIC);//转换坐标映射方式 CSize size = CSize(800, 560); pDC->SetWindowExt(size); //确定窗口大小 //得到实际设备每逻辑英寸的像素数量 int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX); int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY); //得到设备坐标和逻辑坐标的比例 long xExt = (long)size.cx * xLogPixPerInch/96 ; long yExt = (long)size.cy * yLogPixPerInch/96 ;pDC->SetViewportExt((int)xExt, (int)yExt);//确定视口大小}用API函数.
CreateDC函数的原形如下:
HDC CreateDC(
LPCTSTR lpszDriver,
LPCTSTR lpszDevice,
LPCTSTR lpszOutput,
CONST DEVMODE *lpinitData
);
在TestDlg.cpp文件中找到OnPrint函数并作如下改动。
void CTestDlg::OnPrint()
{
// 增加如下代码
char szprinter[80];
char *szDevice,*szDriver,*szOutput;
HDC hdcprint; // 定义一个设备环境句柄
//定逡桓龃蛴∽饕?/span>
Static DOCINFO di={sizeof(DOCINFO),"printer",NULL};
// 得到设备字符串存入数组szprinter中
GetProfileString("windows","device",",,,",szprinter,80);
// 将设备字符串分解
if(NULL!=(szDevice=strtok(szprinter,","))&&
NULL!=(szDriver=strtok(NULL,","))&&=(szOutput=strtok(NULL,",")))
// 创建一个打印机设备句柄
if((hdcprint=CreateDC(szDriver,szDevice,szOutput,NULL))!=0) { if(StartDoc(hdcprint,&di)>0) //开始执行一个打印作业 { StartPage(hdcprint); //打印机走纸,开始打印 SaveDC(hdcprint); //保存打印机设备句柄 // 输出一行文字 TextOut(hdcprint,1,1,"这是一个例子",12); // 输出一条直线 MoveToEx(hdcprint,20,20,NULL); LineTo(hdcprint,120,120); RestoreDC(hdcprint,-1); //恢复打印机设备句柄 EndPage(hdcprint); //打印机停纸,停止打印 EndDoc(hdcprint); //结束一个打印作业 MessageBox("打印完毕!","提示",MB_ICONINFORMATION); }
// 用API函数DeleteDC销毁一个打印机设备句柄 DeleteDC(hdcprint); } else { MessageBox("没有默认打印机,或者没有安装打印机!"); return; } }
|