如何根据字体名称、大小来计算CreateFont中的字体高度和宽度?

解决方案 »

  1.   

    已经用下面的公式计算出来了。nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72)
      

  2.   

    換成問另外一個問題吧DrawText 函數加DT_WORDBREAK時只是在单词与单词之间有空格时才会换行。1。如何使没有空格的一串字符也能换行?我有看过这样的效果,但不知是如何实现的。2。DT_WORDBREAK 和 DT_DT_WORD_ELLIPSIS 是否可以一直使用
      

  3.   

    第1个问题,没有空格照样能换行,如以下代码:
    DrawText Me.hdc, s, LenB(StrConv(s, vbFromUnicode)), rc, DT_LEFT Or DT_WORDBREAK
    也可以不使DT_LEFT。关键是rc的宽度要比用DT_CALCRECT计算出来的宽度要小,并且不能使DT_TOP、DT_VCENTER、DT_BOTTOM。
    第2个问题,不能在一起使用。但你可以自己实现。
    首先计算出字符串单行输出时的宽度和高度,然后计算出多行输出时矩形的宽度和度,计算二者的差值截取字符串,再在字符串后补上“...”符号即可。
      

  4.   

    谢谢,我用DT_WORDBREAK Or DT_EDITCONTROL已经实现了无空格自动换行,可有一个缺点:就是在垂直方向上只能是在最上面,无法在中间或底部,不知如何修正?