BOOL GetTextExtentPoint(
  HDC hdc,           // handle to DC
  LPCTSTR lpString,  // text string
  int cbString,      // number of characters in string
  LPSIZE lpSize      // string size
);

解决方案 »

  1.   

    sorry!刚才我发错了!这个问题已经得到解决!也是你说的这个函数!我要问的是:用SetRect 设定了一个区域,但要如何才能让文本的字体大小符合这个区域呢?也就是说假如按照文本的字体大小画出来的话,可能会超出这个区域或者填不满这个区域,怎么才能做到刚好填满呢?这就是求它的合适字体大小!请教!
      

  2.   

    循环穷举
    不断SetTextCharacterExtra设置字间距
    再用GetTextExtentPoint32得的大小
    选出与矩形区域最接近的那个GetTextExtentPoint, GetTextExtentPoint32 VB声明 
    Declare Function GetTextExtentPoint& Lib "gdi32" Alias "GetTextExtentPointA" (ByVal hdc As Long, ByVal lpszString As String, ByVal cbString As Long, lpSize As SIZE)
    Declare Function GetTextExtentPoint32& Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As SIZE) 
    说明 
    判断一个字串的大小(范围)。在Win32环境中,最好使用GetTextExtentPoint32,它提供了更精确的计算结果 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hdc Long,设备场景的句柄 
    lpszString String,欲度量其范围(extent)的一个字串 
    cbString Long,lpszString字串的长度 
    lpSize SIZE,这个结构用于装载字串范围的高度和宽度信息 
    注解 
    这个函数不会将剪切区考虑在内,但却考虑到了由SetTextCharacterExtra函数设置的任何额外空间(间距)
     
      

  3.   

    但是我在用GetTextExtentPoint32函数时,如果文本是字符(字母)则可以得出宽度,但是当是中文字符时,则不能正确得出宽度!请问为什么??
      

  4.   

    我得要求应该是间距不变,SetTextCharacterExtra设定间隔为3,就不在变化,而是变化字体的大小,如果用循环穷举应该可以实现,但是有没有别的apia可以直接得到当设定间隔为某值时的字体应该为多少的值嘛?
      

  5.   

    不要直接用Len(……)得到字符串的长度
    因为VB字符串是UniCode格式的,一个汉字占一个UniCode字符
    而GetTextExtentPoint32是ANSI+DBCS格式的,一个汉字占两个字节长度=LenB(StrConv(……, vbFromUniCode))那样的函数绝对没有