| 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; } }
  |