cprintdialog预览_利用CPrintDialog,打印文件

本文详细介绍了如何在Windows程序设计中使用CPrintDialog进行打印操作,包括设置打印机、打印预览、转换坐标、字体设置及打印流程。关键步骤包括调用StartDoc、StartPage、TextOut、EndPage和EndDoc等函数,以及处理打印字体和设备DPI转换。此外,还提供了示例代码,展示了如何创建自定义打印字体并进行打印。
摘要由CSDN通过智能技术生成

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值