zoukankan      html  css  js  c++  java
  • 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;
    }
    }

  • 相关阅读:
    关于重复记录
    easyui-dataGrid
    初尝easyui
    字符串处理の合并记录行
    实现P2P远程控制项目的基本逻辑
    命令行启动vscode中的ssh-remote插件并指定路径
    关于TCP三次握手的意义及其具体实现解释
    Git使用建议及规范
    MySQL C API的参数化查询
    gdb定位程序CPU占用过高问题
  • 原文地址:https://www.cnblogs.com/chenzhonghua021/p/858143.html
Copyright © 2011-2022 走看看