请问如何根据文字的字体信息计算当前文字在屏幕上所占的高度和宽度?例如字体为:
LOGFONT logfont;

// 设置字体特征
logfont.lfHeight = Height;   
logfont.lfWidth = Width;         
logfont.lfEscapement = 0;    
logfont.lfOrientation = 0;     
logfont.lfWeight = Weight;  
logfont.lfItalic = bItalic;   
logfont.lfUnderline = bUnderline;  
logfont.lfStrikeOut = bStrikeOut;  
logfont.lfCharSet = ANSI_CHARSET;
logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logfont.lfQuality = DEFAULT_QUALITY;
logfont.lfPitchAndFamily = DEFAULT_PITCH;
strcpy(logfont.lfFaceName,typeface); 此时屏幕分辨率为1024*768
在屏幕上(100, 100)坐标处显示出“这是文本输出”6个字,这时如何才能得到这6个字在屏幕上的宽度和高度?麻烦DX指点,谢谢!

解决方案 »

  1.   

    用 GetTextMetrics或GetOutlineTextMetrics以确定字体尺寸在逻辑坐标中的实际大小。
      

  2.   


            
    #include <windows.h>
            
    #include "ezfont.h"
            TCHAR szAppName    [] = TEXT ("EZTest") ;
            
    TCHAR szTitle      [] = TEXT ("EZTest: Test of EZFONT") ;
            void PaintRoutine (HWND hwnd, HDC hdc, int cxArea, int cyArea)
            
    {
            
               HFONT                                hFont ;
            
               int                                  y, iPointSize ;
            
               LOGFONT                       lf ;
            
               TCHAR                                szBuffer [100] ;
            
               TEXTMETRIC            tm ;
                              // Set Logical Twips mapping mode
                       SetMapMode (hdc, MM_ANISOTROPIC) ;
            
               SetWindowExtEx (hdc, 1440, 1440, NULL) ;
            
               SetViewportExtEx (hdc,        GetDeviceCaps (hdc, LOGPIXELSX),
            
           GetDeviceCaps      (hdc, LOGPIXELSY), NULL) ;
                            // Try some fonts
                       y = 0 ;
            
               for (iPointSize = 80 ; iPointSize <= 120 ; iPointSize++)
            
               {
            
                      hFont = EzCreateFont (hdc, TEXT ("Times New Roman"),
            
                                             iPointSize, 0, 0, TRUE) ;
                              GetObject (hFont, sizeof (LOGFONT), &lf) ;
                              SelectObject (hdc, hFont) ;
            
                      GetTextMetrics (hdc, &tm) ;
            
                      TextOut (hdc, 0, y, szBuffer,
            
                                      wsprintf (    szBuffer,
            
                   TEXT ("Times New Roman font of %i.%i points, ")
            
                  TEXT ("lf.lfHeight = %i, tm.tmHeight = %i"),
            
                    iPointSize / 10, iPointSize % 10,
            
                    lf.lfHeight, tm.tmHeight)) ;
                              DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT))) ;
            
                      y += tm.tmHeight ;
            
              }
            
    }