cprintdialog预览_利用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()';

附上

1:转载相关文档:

打印单位的转换

这个的关键是我们要得到显示设备的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)得到。

打印基本流程

有了前面的知识,现在我们就可以打印了。Windows打印是有着固定的流程的,流程也比较简单。按照固定的顺序调用打印API即可:StartDoc() -> StartPage() -> 打印具体内容 -> EndPage() -> EndDoc()。如果要打印多页,循环StartPage()至EndPage()即可。

示例代码:DOCINFO doc;

ZeroMemory(&doc,sizeof(doc));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值