GetTextExtentPoint32A是根据屏幕计算的,没有转换成打印机的量度,
建议把所有的图形用copyrect,所有的字用textout显示到一张图上,
然后打印这张图,就在不会有问题了。

解决方案 »

  1.   

    GetTextExtentPoint32A是根据屏幕计算的,没有转换成打印机的量度,
    建议把所有的图形用copyrect,所有的字用textout显示到一张图上,
    然后打印这张图,就在不会有问题了。
      

  2.   

    to netlib
    GetTextExtentPoint32A好像不是完全根据屏幕计算的吧,因为给它传递一样的字符串,但给它打印机画布的DC,预览面板的DC,它返回的值是不一样的。
      

  3.   

    测出来的应该和字体、输出类型、大小等有关,
    你说对了,第一个参数是指定设备的,所以不是完全根据屏幕计算的,
    谢谢你的提醒,非常感谢。
    不过这个可能是单位的问题,
    打印机上每个点阵的宽和高到底是多少,GetTextExtentPoint32A反回的是不是点阵数,可能打印不正常的原因就在这里,你在找找相关资料,
    如果不行,我刚提供的方法应该能解决问题。
      

  4.   

    to NetLib
    跟据MSDN,GetTextExtentPoint32A返回的逻辑单位,其实我在打印的时侯,一切都很正常,但是在打印预览的时侯,我给打印预览面板设置了跟打印机一样的TFont,并把预览面板的逻辑大小映射为打印纸的大小,但调用GetTextExtentPoint32A得到的大小就是比打印机要大一些。
    另外问一句,你用的是CSDN助手吗?
      

  5.   

    我的理解是打印预览是不会和打印机的输出一样的,
    因为预览是输出在屏幕上,打印是输出在打印机上,
    而两个表示的单位也是不一样的,
    预览用的是向素,而打印用的不是象素,所以反回不一样是应该的。‘另外问一句,你用的是CSDN助手吗?’
    我不明白你的意思,我没有用什么助手