vc++实现打印功能

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

posted @ 2007-08-16 14:43  技术商业梦  阅读(1488)  评论(0编辑  收藏  举报