小弟负责维护公司开发的一款报表控件,最近遇到一个不同打印分辨率下打印字体大小不一致的问题。   打印前的准备工作如下
   SetMapMode 设置为 MM_ANISOTROPIC
   SetViewportOrgEx  设置原点位置
   然后根据比例设置 SetWindowExtEx SetViewportExtEx 
   后调用报表控件的绘制报表方法。   画线等都没有问题,可是当打印机的DPI不同时发现打印出来的字体与设置时大小不一致,
经过调试发现相同字号在不同的打印机DPI下LOGFONT中的lfHeight值不一致,经过
查找资料发现字体高度与字体尺寸需要调用如下公式转换
lHeight = -MulDiv(FontSize,m_pDC->GetDeviceCaps(LOGPIXELSY),72);   可小弟不明白原理以及72是怎么来的,希望能够得到大家的解答。

解决方案 »

  1.   

    http://www.codeproject.com/KB/printing/printingmadeeasy.aspx?display=PrintAll&fid=30&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=26
      

  2.   

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI\LogPixels,
    有个 DWORD 值 96,不过似乎也不像 72 ...
      

  3.   

    参考一下:http://www.cnblogs.com/james-yu/archive/2009/05/29/1491600.html
      

  4.   

    简单的说,字体的大小单位磅(points) 是1/72逻辑英寸,屏幕的分辨率是96DPI(96点每英寸),那么屏幕每个点就是72/96=0.75磅,那么屏幕字体大小可以选择的尺寸就是屏幕点/磅(也就是0.75)的整数倍,注意,如果屏幕的逻辑分辨率不是96DPI,那么可能不是0.75。默认设置下,GetDeviceCaps(LOGPIXELSY)返回的是96