利用CPrintDialog打印文件

前段时间需要将日志信息通过打印机打印出来。

  总结了一下其中的一些用法:

  1:用CPrintDialog 可以呼出窗口让用户选择打印机或者采用默认的打印机直接打印。

  StartPage…..EndPage  完成一页文档的打印。  如需改变DC设置,需要调用ReSetDC()

  多次调用这两个函数,可以实现打印多页

  2:TextOut坐标的确定。

  TextOut中的坐标是DC中的逻辑坐标。

  和实际的物理坐标需要转换。

  GetDeviceCpas();  //获取DC中的Device信息。

  GetTextMetrics(); //获取字体的信息。 字体高度和本身高度+行距。

  3:TextOut中的字体可以设置。

  关键代码如下:

  CFont myFont;

  myFont.CreatePontFont(….);

  oldFont = dc.SelectObject();

  myFont.DelectObject()';

  附上相关文档

    打印单位的转换

    这个的关键是我们要得到显示设备的DPI,即每英寸设备支持的点数。有了DPI我们就可以在我们习惯的单位和设备单位之间转换了,用到的API是GetDeviceCaps(),这个函数功能强大,具体可参考MSDN,在这里我们只用来得到设备DPI。看示例代码:
        //某些设备水平和垂直方向的DPI可能不同,所以要分别得到。

        //得到水平方向的转换比例
        float getXScale(HDC printDC)  //printDC: 打印机DC设备句柄
        {
            //得到打印机水平方向的DPI
            int xDPI = GetDeviceCaps(printDC, LOGPIXELSX);

            //254.0: 每英寸25.4毫米
            float xScale = (float)(254.0 / xDPI);

            return xScale;
        }

        //得到垂直方向的转换比例
        float getYScale(HDC printDC)  //printDC: 打印机DC设备句柄
        {
            //得到打印机垂直方向的DPI
            int yDPI = GetDeviceCaps(printDC, LOGPIXELSY);

            float yScale = (float)(254.0 / yDPI);

            return yScale;
        }

        //厘米转换为设备像素,水平方向
        double cm2Unit_W(float xScale, double w) //w单位为厘米
        {
            return w*100/xScale;
        }

        //厘米转换为设备像素,垂直方向
        double cm2Unit_H(float yScale, double h) //h单位为厘米
        {
            return h*100/yScale;
        }
    上面代码中,如果将printDC换为显示器设备DC句柄,即可得到厘米转换为显示器像素单位,打印预览时使用。得到显示器设备句柄可用::GetDC(NULL)得到。

 来源http://www.changsj.tk

posted @ 2010-04-18 11:59  7069202a  阅读(226)  评论(0编辑  收藏  举报