利用CPrintDialog打印文件 (2)

 打印基本流程

    有了前面的知识,现在我们就可以打印了。Windows打印是有着固定的流程的,流程也比较简单。按照固定的顺序调用打印API即可:StartDoc() -> StartPage() -> 打印具体内容 -> EndPage() -> EndDoc()。如果要打印多页,循环StartPage()至EndPage()即可。
    示例代码:
        DOCINFO   doc;
        ZeroMemory(
        doc.cbSize = sizeof(doc);
        doc.lpszDocName = (LPCTSTR)"Print Test File";

        StartDoc(printDC,   //准备打印

        StartPage(printDC);  //开始打印页

        //在(2.5cm, 2.5cm)处打印文本
        char* text = "打印测试文本";

        float xScale = getXScale(printDC);
        float yScale = getYScale(printDC);

        double x = cm2Unit_W(xScale, 2.5);
        double y = cm2Unit_H(yScale, 2.5);

        //在指定位置打印文本
        TextOut(printDC, (int)x, (int)y, (LPTSTR)text, strlen(text));

        EndPage(printDC);  //结束打印页

        EndDoc(printDC);  //结束打印

    打印字体的设置

    很多时候我们希望能控制打印字体,下面的代码可以创建你想要的字体格式:
        /*  创建自定义打印字体
            fontFace:字体名称,如果为NULL,默认采用"宋体"
            fontHeight:字体高度,单位为厘米
            isBold:是否加粗
            isItalic:是否斜体
            isUnderLine:是否下划线
            isStrikeOut:是否删除线
        */
        HFONT getFont(LPCTSTR fontFace, double fontHeight, bool isBold, bool isItalic, bool isUnderLine, bool isStrikeOut)
        {
            int width = 0; //字体宽度由系统决定
            int weight = FW_NORMAL;
            DWORD italic = 0;
            DWORD underLine = 0;
            DWORD strikeOut = 0;
            DWORD charSet = DEFAULT_CHARSET;
            LPCTSTR face = (LPCTSTR)"宋体";

            float height = cm2Unit_H(fontHeight);

            if(fontFace != 0)
            {
                face = fontFace;
            }

            if(isBold)
            {
                weight = FW_BOLD;
            }

            if(isItalic)
            {
                italic = 1;
            }

            if(isUnderLine)
            {
                underLine = 1;
            }

            if(isStrikeOut)
            {
                strikeOut = 1;
            }

            HFONT font = CreateFont((int)height, width, 0, 0,
                                     weight, italic, underLine, strikeOut, charSet,
                                     OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
                                     DEFAULT_PITCH | FF_DONTCARE, face );
            return font;
        }

    小结

    以上就是我们在实现打印中遇到的常见问题,相信理解了这些,在我们自己的程序中实现打印就不再是什么困难的事情了。

 

posted @ 2010-04-18 12:02  7069202a  阅读(213)  评论(0编辑  收藏  举报