阅读:2003回复:5
共享:打印机驱动中获取PointSize,我是这样实现的
刚才有人在讨论PointSize的获取,原贴太长了,开新贴继续讨论
字体的大小一般是用磅表示,也就是PointSize的单位,1英寸=72磅, Microsoft WORD 中指定字体的大小就是磅单位的 而在实际应用中通常使用逻辑点,即象素点. 象LOGFONT中lfHeight和lfWidth, 显示器上72磅的字在显示器上高度lfHeight是96个象素点,显示器分辨率96DPI PointSize=72; lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72); 另外,驱动中一般不建议使用浮点数, 虽然象USERMODE_DRIVER模式的打印机驱动可以使用float和double, 而建议使用由长整型表示的浮点数,想FIX的28.4格式浮点数 在DrvTextOut中获取字体的大小我也是采用的FIX类型的浮点数 |
|
最新喜欢:aqua_a...
|
沙发#
发布于:2005-04-06 13:57
文件忘传上来了,呵呵
|
|
|
板凳#
发布于:2005-04-06 18:47
UP ! 学习...
|
|
|
地板#
发布于:2005-04-07 09:24
这样作也还没有完美,MulDiv的返回值是int
这意味着10.5和10是一样的大。。 另外很多软件包括word是可以自设大小的,虽然超过72会被自动当成图形处理,但是带小数的情况不是没有。 建议直接算pixel size 算了,这样误差最小,而且打印机直接接收。 |
|
地下室#
发布于:2005-04-07 09:42
另外,十分感谢大佬的帮助,通过这些天的探讨,总算快完工了。上帝保佑不要再出bug...........
|
|
5楼#
发布于:2005-04-07 10:32
PS驱动里面大量使用了浮点数,
而驱动中它是按24.8格式的FIX浮点型进行运算的, 直接用double,flaot当然也是完全可以的了 |
|
|