请问如何根据文字的字体信息计算当前文字在屏幕上所占的高度和宽度?例如字体为:
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指点,谢谢!
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指点,谢谢!
解决方案 »
- 请教Codejoke界面库无法实现换肤
- VC++ 导入Excel类型库的问题??
- 关于多线程共享套接字问题
- 请高手指教两个问题
- 急急 ~~vc下任何实现组件上传文件?进者有分,100求帮助
- VC里设定系统时间的函数是什么?
- 怎么消除位图移动试验的屏幕闪烁的问题?
- visual c++ 跟 c++ builder 有什么分别呢?
- CoRegisterClassObject 着个到底是干啥用的?
- sql语法问题,请帮忙
- 请大虾指点,SetWindowText(HWND hWnd,LPCTSTR lpString )这个函数怎么给combox控件赋值?
- 如何获得一个字符或者一个字符串在界面上显示的宽度(高度)?
#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 ;
}
}