Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19442
  • 博文数量: 33
  • 博客积分: 291
  • 博客等级: 准尉
  • 技术积分: 295
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-20 09:47
文章分类

全部博文(33)

文章存档

2011年(33)

我的朋友

分类: C/C++

2011-05-24 16:14:10

GetTextMetrics 和 GetTextExtent的区别 2 F0 f4 ^* f/ x, w% h& W
(c++计算字符串像数)2009-05-19 15:55$ W# Y5 P( z4 i3 Q8 u3 b+ r
使用函数GetTextExtent可以计算出一个特定的文本行的宽度和高度,使用函数GetTextMetrics可以得到字符的有关尺寸,这两个函数的使用如下:5 W% l1 @5 q7 O. p5 w5 x
GetTextExtent 函数
6 [* s/ P& U, F/ n( T用途:该函数使用设备对象dc当前使用的字体计算一个文本行宽度和高度(逻辑单位),在计算时不考虑当前裁剪区。% t9 e6 ~0 [$ M7 r& p5 O
原 型 DWORD GetTextExtent(  ) m6 ?3 F: b" k% \
  HDC hDC 设备对象句柄( [9 X2 e. T- n6 O0 q2 f# k- u/ S
  LPSTR lpString, 指向一个字符串
1 J. w7 f+ }6 g. i  int nCount 所要计算字符数。, [% o* C; v: ?8 W8 n, x
);
3 Q: u6 V0 A( Q" N5 F返回值 返回字符串的尺寸,高度在高位字上,宽度在低位字上。
   g   p2 b) _+ ~& H! Z# O! o8 U& xGetTextMetrics 函数
3 I+ J8 Z1 F0 x用途 返回设备对象dc当前所使用的字体字符的有关尺寸。
0 G% C. y) b% }7 ?& t+ D0 ?1 t原型 DWORD GetTextMetrics(  
: n+ ?+ S% l" j* S" p  HDC hDC 设备对象句柄
4 t3 t6 V8 U8 i8 u9 X; ^  LPTEXTMETRIC lpMetric, 指向TEXTMETRIC类型的变量的指针,有关尺寸被放入该变量中。) E, D, l& ~, g8 N4 [9 L
);     r: {. z- U4 c3 j4 K5 k6 }
返回值 若调用成功,返回非零,否则返回零。1 y6 Q3 n- }6 Q' ]. ]1 ]
--------------------------------------------------------------------------7 n) W5 G, M; j# h2 l8 G5 c$ x; ^
想得到当前DC中字体的信息,可以用GetTextMetrics,一般用得多的是取得字体高度。 5 }; m$ d0 S, P) ?+ p1 t3 X- c
GetTextExtent得到给定字符串的尺寸:高和宽,对具体的文字是准确的输出占用的尺寸。
: \: f) p) ]   J0 L/ C) @% O//////////////////////////////////////////////////////////////////////////////////////////////
( l, A& `! R# {: ~$ pAPI之文本和字体函数' [7 W( e& c' O: w, `: U8 Q, X3 G
AddFontResource 在Windows系统中添加一种字体资源
0 k8 a9 ~: c8 K' J7 ~CreateFont 用指定的属性创建一种逻辑字体 4 H. g/ l; R+ K
CreateFontIndirect 用指定的属性创建一种逻辑字体 ' l* l* j2 q9 h
CreateScalableFontResource 为一种TureType字体创建一个资源文件,以便能用API函数AddFontResource将其加入Windows系统
4 P. X; q3 n* a   RDrawText 将文本描绘到指定的矩形中 * F$ A1 t3 w) f7 H. w
DrawTextEx 与DrawText相似,只是加入了更多的功能
% Q7 r! q# K/ \/ u7 q9 p0 _- d$ ?- |EnumFontFamilies 列举指定设备可用的字体
7 |7 i* f; P+ U8 p+ T$ yEnumFontFamilie*** 列举指定设备可用的字体 5 i. G# A4 N4 T3 L, ?
EnumFonts 列举指定设备可用的字体
% S. y$ J0 g/ O% MExtTextOut 经过扩展的文本描绘函数。也请参考SetTextAlign函数 . }3 f8 L9 ~4 \" u4 k4 h! u
GetAspectRatioFilterEx 用SetMapperFlags要求Windows只选择与设备当前纵横比相符的光栅字体时,本函数可判断纵横比大小
3 P) v1 [% V0 b/ Y6 B* z- K1 }, fGetCharABCWidths 判断TureType字体中一个或多个字符的A-B-C大小
5 Q* e6 a% D! y" S2 N: bGetCharABCWidthsFloat 查询一种字体中一个或多个字符的A-B-C尺寸 ( ~- d' e( C7 r
GetCharacterPlacement 该函数用于了解如何用一个给定的字符显示一个字串 ' w, e0 m: V3 z
GetCharWidth 调查字体中一个或多个字符的宽度
: @# W( G+ y6 w5 @' v, x9 E" B/ {4 AGetFontData 接收一种可缩放字体文件的数据
- m3 W5 Y% t; o% N# Q7 y, HGetFontLanguageInfo 返回目前选入指定设备场景中的字体的信息
* d8 j- @- B2 w& mGetGlyphOutline 取得TureType字体中构成一个字符的曲线信息
# E) O7 Z6 j' m& nGetKerningPairs 取得指定字体的字距信息 ' i* W5 V. \" f) J3 k1 ^; M
GetOutlineTextMetrics 接收与TureType字体内部特征有关的详细信息
4 ~9 O# h+ I   XGetRasterizerCaps 了解系统是否有能力支持可缩放的字体 $ q8 v# E9 M( P5 p; w4 E! p
GetTabbedTextExtent 判断一个字串占据的范围,同时考虑制表站扩充的因素 * X4 a. I7 |* N( `+ O
GetTextAlign 接收一个设备场景当前的文本对齐标志
7 J6 _* C3 a/ h) H7 W& ]5 PGetTextCharacterExtra 判断额外字符间距的当前值 . G: _* ^/ R7 ^6 i
GetTextCharset 接收当前选入指定设备场景的字体的字符集标识符
# B: l& [1 ^! B7 i5 kGetTextCharsetInfo 获取与当前选定字体的字符集有关的详细信息 9 Q& ?$ R: a# h+ m3 J
GetTextColor 判断当前字体颜色。通常也称为“前景色”
" @' T" g# m9 O: hGetTextExtentExPoint 判断要填入指定区域的字符数量。也用一个数组装载每个字符的范围信息 " e1 Y$ ^1 G' g9 \- n   A; ^7 |% A% P
GetTextExtentPoint 判断一个字串的大小(范围) 3 L# o- T6 b. v+ q2 Y5 [5 K
GetTextFace 获取一种字体的字样名
4 v8 y+ t) Z; X* l0 V3 }5 k+ cGetTextMetrics 获取与选入一种设备场景的物理字体有关的信息
" X+ d& q: O: }% x+ A7 I& mGrayString 描绘一个以灰色显示的字串。通常由Windows用于标识禁止状态
% P. s3 \( A& x2 EPolyTextOut 描绘一系列字串
, u* ^8 j7 f$ f- y   j- ]8 MRemoveFontResource 从Windows系统中删除一种字体资源
3 L8 s- x" _# ^1 h* b- xSetMapperFlags Windows对字体进行映射时,可用该函数选择与目标设备的纵横比相符的光栅字体 ! a$ {/ |, {% c, w7 }1 [9 U8 F
SetTextAlign 设置文本对齐方式,并指定在文本输出过程中使用设备场景的当前位置
8 T( Y5 h/ S' ]) V; ISetTextCharacterExtra 描绘文本的时候,指定要在字符间插入的额外间距
* Y8 V3 K+ J! e5 M1 ~   N- jSetTextColor 设置当前文本颜色。这种颜色也称为“前景色”
0 y0 w- |' V0 o1 \. w0 G" F* DSetTextJustification 通过指定一个文本行应占据的额外空间,可用这个函数对文本进行两端对齐处理 2 O7 T5 P5 `$ z# |& s3 I$ n8 h
TabbedTextOut 支持制表站的一个文本描绘函数 * z; k( P; w* C4 n& P
TextOut 文本绘图函数8 @2 n; g1 b. `+ X8 A9 p

4 v! A9 _' L3 B5 @- |1 l8 g////////////////////////////////////////////////////////////////////////////////////////////////
( J' \0 |2 X3 B8 m4 u8 `4 yTEXTMETRIC! {7 _5 j% y2 N( q# z& v. ]* d. I
  TEXTMETRIC是在WINGDI.H中定义的型态的结构。TEXTMETRIC结构有20个栏位:
$ R5 [( a, G7 }& K  typedef struct tagTEXTMETRIC { // tm 5 S0 a5 K1 }$ X
  LONG tmHeight; //字符高度& x3 M; t9 `6 X
  LONG tmAscent; //字符上部高度(基线以上). T( c   O9 @" A1 ?9 }) S8 `, B# C
  LONG tmDescent; //字符下部高度(基线以下)
) q% k+ X: m* D& g  LONG tmInternalLeading; //由tmHeight定义的字符高度的顶部空间数目
5 ^! y   w+ ~% w7 v! m  LONG tmExternalLeading; //加在两行之间的空间数目
- ?1 Q; ~, w. [: k0 q  LONG tmAveCharWidth; //平均字符宽度
) @# L& E4 B0 {- p& O, f" ~0 E  LONG tmMaxCharWidth; //最宽字符的宽度4 y# F+ X" W( P+ k1 C* {/ ]
  LONG tmWeight; //字体的粗细轻重程度- A# ^' p$ Z' n
  LONG tmOverhang; //加入某些拼接字体上的附加高度
3 v1 B6 g9 o5 L3 c/ x. _$ X( c  LONG tmDigitizedAspectX; //字体设计所针对的设备水平方向( t( g- T( ?' c
  LONG tmDigitizedAspectY; //字体设计所针对的设备垂直方向9 R   G+ Y$ t* w3 ~
  BCHAR tmFirstChar; //为字体定义的第一个字符+ x1 E5 ~% @% y" L- \
  BCHAR tmLastChar; //为字体定义的最后一个字符$ _$ y- V$ i% K' C1 ~8 n) O
  BCHAR tmDefaultChar; //字体中所没有字符的替代字符
5 ^& b# z4 A& h# S  BCHAR tmBreakChar; //用于拆字的字符3 u& y" [& ~5 W$ @0 B
  BYTE tmItalic; //字体为斜体时非零1 ?, G( {2 v; a% o! L6 H2 ?
  BYTE tmUnderlined; //字体为下划线时非零1 _   g, x* Z9 ^( w/ [
  BYTE tmStruckOut; //字体被删去时非零$ a$ [) a% q& E8 \0 O
  BYTE tmPitchAndFamily; //字体间距(低4位)和族(高4位)
1 W% k3 F   w4 z! z, i( q; a  BYTE tmCharSet; //字体的字符集
, l+ q8 O0 H, t- r   @" l5 g  } TEXTMETRIC;
2 n8 Y* Z* W# N4 |+ ]% O  TEXTMETRIC类型的变量用于存储装置字体结构信息(上诉变量),在窗口中输出文字时需要用到上诉变量。0 S6 L( s" f$ T) u
  要获得TEXTMETRIC类型变量的值可以用GetTextMetrics(HDC,LPTEXTMETRIC)函数。
' R0 h8 _' X# ^5 {  运用例子如下:
; i: y   c" Q3 B( c& a* x  TEXTMETRIC tm;
6 S/ w0 s- |- w. L7 o. g$ t  GetTextMetrics(hdc,&tm);

阅读(654) | 评论(0) | 转发(0) |
0

上一篇:svn 的使用

下一篇:卡耐基 经典语录

给主人留下些什么吧!~~