Contents
[Trial version] 文本和字体函数
[Trial version] EnumFonts
[Trial version] ExtTextOut
[Trial version] GetAspectRatioFilterEx
[Trial version] GetCharABCWidths
[Trial version] GetCharABCWidthsFloat
[Trial version] GetCharacterPlacement
[Trial version] GetCharWidth
[Trial version] GetFontData
[Trial version] GetFontLanguageInfo
[Trial version] GetGlyphOutline
[Trial version] GetKerningPairs
[Trial version] GetOutlineTextMetrics
[Trial version] GetRasterizerCaps
[Trial version] GetTabbedTextExtent
[Trial version] GetTextAlign
[Trial version] GetTextCharacterExtra
[Trial version] GetTextCharset
[Trial version] GetTextCharsetInfo
[Trial version] GetTextColor
[Trial version] GetTextExtentExPoint
[Trial version] GetTextExtentPoint
[Trial version] GetTextFace
[Trial version] GetTextMetrics
[Trial version] GrayString
[Trial version] PolyTextOut
[Trial version] RemoveFontResource
[Trial version] SetMapperFlags
[Trial version] SetTextAlign
[Trial version] SetTextCharacterExtra
[Trial version] SetTextColor
[Trial version] SetTextJustification
[Trial version] TabbedTextOut
[Trial version] TextOut
[Amber demo]
文本和字体函数,共三页。第一页,第二页,第三页
AddFontResource
在Windows系统中添加一种字体资源
CreateFont
用指定的属性创建一种逻辑字体
CreateFontIndirect
用指定的属性创建一种逻辑字体
CreateScalableFontResource
为一种TureType字体创建一个资源文件,以便能用API函数AddFontResource将其加入Windows系统
DrawText
将文本描绘到指定的矩形中
DrawTextEx
与DrawText相似,只是加入了更多的功能
EnumFontFamilies
列举指定设备可用的字体
EnumFontFamiliesEx
列举指定设备可用的字体
EnumFonts
列举指定设备可用的字体
ExtTextOut
经过扩展的文本描绘函数。也请参考SetTextAlign函数
GetAspectRatioFilterEx
用SetMapperFlags要求Windows只选择与设备当前纵横比相符的光栅字体时,本函数可判断纵横比大小
GetCharABCWidths
判断TureType字体中一个或多个字符的A-B-C大小
GetCharABCWidthsFloat
查询一种字体中一个或多个字符的A-B-C尺寸
GetCharacterPlacement
该函数用于了解如何用一个给定的字符显示一个字串
GetCharWidth
调查字体中一个或多个字符的宽度
GetFontData
接收一种可缩放字体文件的数据
[Amber demo]
EnumFonts
VB声明
Declare Function EnumFonts Lib "gdi32" Alias "EnumFontsA" (ByVal hDC As Long, ByVal lpsz As String, ByVal lpFontEnumProc As Long, ByVal lParam As Long) As Long
说明
列举指定设备可用的字体
注解
该函数使用的参数与EnumFontFamilies函数是一样的,工作原
理也大致相同。只是EnumFontFamilies会利用ENUMLOGFONT 和 NEWTEXTMETRIC结构向回调函数传递附加的信息,而不是使用LOGFONT 和 TEXTMETRIC结构。请参考EnumFontFamilies函数,那里有更详细的解释
Top
[Amber demo]
ExtTextOut
VB声明
Declare Function ExtTextOut Lib "gdi32" Alias "ExtTextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal wOptions As Long, lpRect As Rect, ByVal lpString As String, ByVal nCount As Long, lpDx As Long) As Long
说明
经过扩展的文本描绘函数。也请参考SetTextAlign函数
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
x,y
Long,以逻辑坐标表示的一个点,指定了绘图起点
wOptions
Long,下述标志常数的任意组合
ETO_CLIPPED
将文本剪切出指定的矩形
ETO_GLPYH_INDEX
lpString是一个字样索引表。参考对GetCharacterPlacement函数的说明。只适用于Win95
ETO_OPAQUE
在正式描绘文本前,用当前的背景色填充矩形
lpRect
Rect,指定一个矩形,用于对文本进行格式化处理。可指定长整数0,在不用矩形区域的前提下描绘文本
lpString
String,欲描绘的字串
nCount
Long,字串中要显示出来的字符数
lpDx
Long,如果不是零,这个参数就代表指向一个Long值数组的指针。该数组对每一对字符的间距进行了说明(采用逻辑单位)。其中第一个条目是第一和第二个字符的间距;第二个条目是第二和第三个字符的间距;以此类推。如果为零,函数就使用字体的默认间距设置
Top
[Amber demo]
GetAspectRatioFilterEx
VB声明
Declare Function GetAspectRatioFilterEx Lib "gdi32" Alias "GetAspectRatioFilterEx" (ByVal hdc As Long, lpAspectRatio As SIZE) As Long
说明
我们可用SetMapperFlags函数要求Windows只选择与设备当前纵横比相符的光栅字体。这个函数可判断那种特殊选择过程中使用的纵横比是多大
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,一个设备场景的句柄
lpAspectRatio
SIZE,用于装载纵横比的一个结构
Top
[Amber demo]
GetCharABCWidths
VB声明
Declare Function GetCharABCWidths Lib "gdi32" Alias "GetCharABCWidthsA" (ByVal hdc As Long, ByVal uFirstChar As Long, ByVal uLastChar As Long, lpabc As ABC) As Long
说明
判断TureType字体中一个或多个字符的A-B-C大小
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场
景的句柄
uFirstChar
Long,欲调查A-B-C尺寸的第一个字符的ASCII值
uLastChar
Long,欲调查A-B-C尺寸的最后一个字符的ASCII值
lpabc
ABC,在ABC结构数组中的第一个条目。这个数组填充了指定的字符大小设置。该数组的长度必须足够大,足以容下要求的所有字符
注解
对于非TureType字体用GetCharWidth函数
Top
[Amber demo]
GetCharABCWidthsFloat
VB声明
Declare Function GetCharABCWidthsFloat Lib "gdi32" Alias "GetCharABCWidthsFloatA" (ByVal hdc As Long, ByVal iFirstChar As Long, ByVal iLastChar As Long, lpABCF As ABCFLOAT) As Long
说明
查询一种字体中一个或多个字符的A-B-C尺寸
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
iFirstChar
Long,欲调查A-B-C尺寸的第一个字符的ASCII值
iLastChar
Long,欲调查A-B-C尺寸的最后一个字符的ASCII值
lpABCF
ABCFLOAT,在ABCFLOAT结构数组中的第一个条目。这个数组填充了指定的字符大小设置。该数组的长度必须足够大,足以容下要求的所有字符
注解
和GetCharABCWidths不同,这个函数适用于任何字符。ABC值是以浮点数的形式返回的,而且可能不是整数——具体取决于用这个函数处理非TureType字体时采用的转换方式
适用平台
Windows NT
Top
[Amber demo]
GetCharacterPlacement
VB声明
Declare Function GetCharacterPlacement Lib "gdi32" Alias " GetCharacterPlacementA" (ByVal hdc As Long, ByVal lpsz As String, ByVal n1 As Long, ByVal n2 As Long, lpGcpResults As GCP_RESULTS, ByVal dw As Long) As Long
说明
该函数用于了解如何用一个给定的字符显示一个字串
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
lpsz
String,欲分析的字串
n1
Long,字串的长度
n2
Long,若在dw参数中指定了GCP_MAXEXTENT常数,那么一旦显示的字串超出了由该参数指定的宽度(用逻辑单位),函数就会停止处理字串
lpGcpResults
GCP_RESULTS,在这个结构中装载为这个字串计算出来的信息
dw
Long,下述常数的一个或多个:
GCP_CLASSIN
lpGcpResults结构中的lpClass数组包含了字串中各字符的分类信息
GCP_DIACRITIC
在计算时将发音符和“废”字符考虑在内
GCP_DISPLAYZWG
显示某些字符集中使用的不可见字符,根据它们在一个词中的位置修改字符
GCP_GLPYPHSHAPE
允许对字样(字面)进行特殊处理。根据GetFontLanguageInfo函数的结果使用
GCP_JUSTIFY
调整
字样位置,对字串进行对齐处理,使其与n2参数指定的范围相符
GCP_JUSTIFYIN
lpGcpResults结构中的lpDX参数包含了计算过程中使用的对齐粗细设置
GCP_LIGATE
如当前字体支持,就用连字技术将字符合并成单独一个字符
GCP_MAXEXTENT
请参考对n2参数的说明
GCP_USERKERNING
计算字符位置时,使用字距表(如果有的话)可用其他标志对希伯来和阿拉伯字体进行特殊处理。这类语言按照从右到左的顺序显示文字,而且具体显示的字样由字符在一个词中的位置决定
Top
[Amber demo]
GetCharWidth, GetCharWidth32, GetCharWidthFloat
VB声明
Declare Function GetCharWidth& Lib "gdi32" Alias "GetCharWidthA" (ByVal hDC As Long, ByVal iFirstChar As Long, ByVal iLastChar As Long, lpBuffer As Long)
Declare Function GetCharWidth32& Lib "gdi32" Alias "GetCharWidth32A" (ByVal hdc As Long, ByVal iFirstChar As Long, ByVal iLastChar As Long, lpBuffer As Long)
Declare Function GetCharWidthFloat& Lib "gdi32" Alias "GetCharWidthFloatA" (ByVal hdc As Long, ByVal iFirstChar As Long, ByVal iLastChar As Long, pxBuffer As Single)
说明
调查字体中一个或多个字符的宽度。在Win32环境中,请使用GetCharWidth32函数。用GetCharWidthFloat则可获得小数宽度
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hDC
Long,设备场景的句柄
iFirstChar
Long,要调查宽度的第一个字符的ASCII值
iLastChar
Long,要调查宽度的最后一个字符的ASCII值
lpBuffer
Long,指定Long值数组的第一个条目。该数组容纳了字体的字符宽度设置
pxBuffer
Single,指定Single值数组的第一个条目。该数组容纳了字体的字符宽度设置
注解
对于TureType字体,GetCharABCWidths可获得更详细的信息
Top
[Amber demo]
GetFontData
VB声明
Declare Function GetFontData Lib "gdi32" Alias "GetFontDataA" (ByVal hdc As Long, ByVal dwTable As Long, ByVal dwOffset As Long, lpvBuffer As Any, ByVal cbData As Long) As Long
说明
接收一种可缩放字体文件的数据。随后,可用这些数据将字体信息嵌入一个文档。如果需要在文档使用一种特殊字体,同时这种字体在大多数系统中都不常见,而且程序员希望文档无论如何都要显示这种字体,那么这种技术就相当有用了
在VB里使用
未经测试
Use with VB:Untested
Top
[Amber demo]
GetFontLanguageInfo
VB声明
Declare Function GetFontLanguageInfo Lib "gdi32" Alias "GetFontLanguageInfo" (ByVal hdc As Long) As Long
说明
返回目前选入指定设备场景中的字体的信息
返回值
Long,如返回零,表示是简单字体;GCP_ERROR表示
出错。否则,返回下述一个或多个标志:
GCP_DBCS
双字节字符集
GCP_DIACRITIC
字体包含了发音字符
FLI_GLYPHS
字体包含了通常不会显示出来的字样
GCP_GLYPHSHAPE
字体包含了特殊字符,用于字样显示由除字符值以外的其他因素决定的场合。例如显示字样由一个字符在单词中位置决定,或者显示单个“连字”,指出这是两个字符值的组合
GCP_KASHIDA
在阿拉伯字体中使用
GCP_LIGATE
字体包含了连字字样
GCP_USERKERNING
字体包含了字距表
GCP_REORDER
字体必须记录下来,以便正确显示。随同希伯来和阿拉伯字体使用
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
注解
从这个函数返回的值可用于设置GetCharacterPlacement函数的标志
Top
[Amber demo]
GetGlyphOutline
VB声明
Declare Function GetGlyphOutline Lib "gdi32" Alias "GetGlyphOutlineA" (ByVal hdc As Long, ByVal uChar As Long, ByVal fuFormat As Long, lpgm As GLYPHMETRICS, ByVal cbBuffer As Long, lpBuffer As Any, lpmat2 As MAT2) As Long
说明
取得TureType字体中构成一个字符的曲线信息。主要用于将文本转换成曲线,以及用于字体的特殊处理(比如造字程序。无论如何,都要求程序员掌握高深的字体技术)。请参考由微软发布的TureType字体规格书,其中对这个字体进行了更详细的解释
Top
[Amber demo]
GetKerningPairs
VB声明
Declare Function GetKerningPairs Lib "gdi32" Alias "GetKerningPairsA" (ByVal hdc As Long, ByVal cPairs As Long, lpkrnpair As KERNINGPAIR) As Long
说明
取得指定字体的字距信息
返回值
Long,返回的字距对数量,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
cPairs
Long,KERNINGPAIR结构在数组中的数量,由lpkrnpair参数指定。如果将这个参数与lpkrnpair设置成零,可判断出字距表的大小
lpkrnpair
KERNINGPAIR,指定KERNINGPAIR结构数组中的第一个条目
注解
参考KERNINGPAIR
返回以后,结构会针对数组中的每个条目象下面这样设置字段:
wFirst指定一个双字符序列的第一个字符;wSecond指定第二个字符。iKernAmount字段指定指定这两个字符的字间距。
例如,假设第一个字符是"f",第二个是"i"。那么在这两个字符一个紧接一个显示出来时,字间距就是添加到默认字符间距上的一个逻辑距离。这个值通常为负,因为系统通常会令两个字符靠得更近
Top
[Amber demo]
GetOutlineTextMetrics
VB声明
Declare Function GetOutlineTextMetrics Lib "gdi32" Alias "GetOutlineTextMetricsA" (ByVal hdc As Long, ByVal cbData As Long, lpotm As OUTLINETEX
TMETRIC) As Long
说明
接收与TureType字体内部特征有关的详细信息。请参考微软公司发布的TureType字体规格文件,它提供了这个函数的进一步信息
Top
[Amber demo]
GetRasterizerCaps
VB声明
Declare Function GetRasterizerCaps Lib "gdi32" Alias "GetRasterizerCaps" (lpraststat As RASTERIZER_STATUS, ByVal cb As Long) As Long
说明
了解系统是否有能力支持可缩放的字体。利用得到的结果,可判断那种系统中是否允许使用TureType字体
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
lpraststat
RASTERIZER_STATUS,这个结构用于装载光栅信息
cb
Long,欲复制到结构中的字符数
注解
结构目前的大小是6个字符,并包含在RASTERIZER_STATUS结构的第一个整数中
Top
[Amber demo]
GetTabbedTextExtent
VB声明
Declare Function GetTabbedTextExtent Lib "user32" Alias "GetTabbedTextExtentA" (ByVal hdc As Long, ByVal lpString As String, ByVal nCount As Long, ByVal nTabPositions As Long, lpnTabStopPositions As Long) As Long
说明
判断一个字串占据的范围,同时考虑制表站扩充的因素。也请参考TabbedTextOut函数
返回值
Long,低16位包含了文本宽度,采用设备场景的逻辑坐标表示。高16位则包含了文本高度。零意味着出错
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
lpString
String,欲计算的字串
nCount
Long,字串中的字符数
nTabPositions
Long,lpnTabStopPositions数组中的制表站数量。如果是零,则lpnTabStopPositions也应是NULL(需另行创建一个函数声明,将这个参数声明成ByVal nTabPositions&)。在这种情况下,制表站会根据当前字体的平均字符宽度,设置成默认的8字符间距。如nTabPositions是1,那么制表站间距就会以lpnTabStopPositions数组的第一个条目为准
lpnTabStopPositions
Long,指定制表站位置数组的第一个条目。这种位置是按升序用设备坐标指定的
注解
进行这种计算的时候,剪切区不会考虑在内
Top
[Amber demo]
GetTextAlign
VB声明
Declare Function GetTextAlign Lib "gdi32" Alias "GetTextAlign" (ByVal hdc As Long) As Long
说明
接收一个设备场景当前的文本对齐标志
返回值
Long,当前的文本对齐标志。GDI_ERROR表示失败。会设置GetLastError。文本的对齐方法由几个常数的组合决定。其中每个常数都来自下述不同的组别。参考下面总结的文本对齐标志
水平对齐标志
TA_CENTER
文本在约束矩形内居中显示
TA_LEFT
文本在约束矩形内左对齐(默认设置)
TA_RIGHT
文本在约束矩形内右对齐
垂直对齐标志
定义文本输出函数的Y参数的含义
TA_BASELINE
Y参数指定字体基线的位置
TA_BOTTOM
Y参数指定约束矩形底边的位置
TA_TOP
Y参数指定约束矩形顶边的位置(默认设置)
当前位置
TA_NOUPDATECP
文本输出函数不使用设备场景当前的绘图位置
TA_UPDATECP
文本输出函数使用设备场景当前的绘图位置。完成绘图后,输出函数会对当前位置进行更新。文本输出函数的X和Y参数会被忽略——绘图会以当前位置为起点
其他
TA_RTLREADING
文本输出从右到左进行。仅在Windows95下适用于希伯来和阿拉伯字体
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
注解
参考对SetTextAlign函数的说明,进一步了解文本对齐标志的情况
Top
[Amber demo]
GetTextCharacterExtra
VB声明
Declare Function GetTextCharacterExtra Lib "gdi32" Alias "GetTextCharacterExtraA" (ByVal hdc As Long) As Long
说明
判断额外字符间距的当前值。请参考SetTextCharacterExtra函数,了解进一步的情况
返回值
Long,返回Windows描绘文本时于字符间添加的额外空间大小
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
Top
[Amber demo]
GetTextCharset
VB声明
Declare Function GetTextCharset Lib "gdi32" Alias "GetTextCharset" (ByVal hdc As Long) As Long
说明
接收当前选入指定设备场景的字体的字符集标识符
返回值
Long,字符集标识符。DEFAULT_CHARSET代表默认字符集;-1表示出错
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
Top
[Amber demo]
GetTextCharsetInfo
VB声明
Declare Function GetTextCharsetInfo Lib "gdi32" Alias "GetTextCharsetInfo" (ByVal hdc As Long, lpSig As FONTSIGNATURE, ByVal dwFlags As Long) As Long
说明
获取与当前选定字体的字符集有关的详细信息
返回值
Long,字符集标识符。DEFAULT_CHARSET代表默认字符集;-1表示出错
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
lpSig
FONTSIGNATURE,用于装载字符集信息的结构。有关Unicode字体签名(signature)的资料可在Unicode规格文件中找到
dwFlags
Long,已保留,设为零
Top
[Amber demo]
GetTextColor
VB声明
Declare Function GetTextColor Lib "gdi32" Alias "GetTextColor" (ByVal hdc As Long) As Long
说明
判断当前字体颜色。通常也称为“前景色”
返回值
Long,文字的当前RGB颜色设置。如果出错,会返回CLR_INVALID。会设置GetLastError
参
数表
参数
类型及说明
hdc
Long,设备场景的句柄
注解
在VB里用ForeColor属性设置图片控件和窗体
Top
[Amber demo]
GetTextExtentExPoint
VB声明
Declare Function GetTextExtentExPoint Lib "gdi32" Alias "GetTextExtentExPointA" (ByVal hdc As Long, ByVal lpszStr As String, ByVal cchString As Long, ByVal nMaxExtent As Long, lpnFit As Long, alpDx As Long, lpSize As SIZE) As Long
说明
判断要填入指定区域的字符数量。也用一个数组装载每个字符的范围信息
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
lpszStr
String,准备量度其范围的字串
cchString
Long,lpszStr字串的长度
nMaxExtent
Long,采用逻辑单位表示的水平范围
lpnFit
Long,在其中保存欲填充到指定区域的字符数量。可以为NULL(用一个别名化的声明来设置ByVal As Long)——此时会忽略nMaxExtent设置
As
Long,cchString数组的第一个条目。每个条目都要保存从字串起点到这个字符的距离(采用逻辑单位)。如果不需要这方面的信息,也可设为NULL(用别名声明设置 ByVal As Long)
lpSize
SIZE,这个结构用于装载字串范围的高度和宽度信息
注解
可用这个函数计算自动换行输出时的字符位置
Top
[Amber demo]
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函数设置的任何额外空间(间距)
Top
[Amber demo]
GetTextFace
VB声明
Declare Function GetTextFace Lib "gdi32" Alias "GetTextFaceA" (ByVal hdc As Long, ByVal nCount As Long, ByVal lpFacename As String) As Long
说明
获取一种字体的字样名
返回值
Long,缓冲区中载入的字节数量。零表示失败。会
设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
nCount
Long,lpFacename字串的大小
lpFacename
String,指定一个字串缓冲区,用于装载当前选定字体的字样名称。这个缓冲区事先必须初始化成至少nCount+1个字符的长度
注解
类似于读取VB的FontName属性
Top
[Amber demo]
GetTextMetrics
VB声明
Declare Function GetTextMetrics Lib "gdi32" Alias "GetTextMetricsA" (ByVal hdc As Long, lpMetrics As TEXTMETRIC) As Long
说明
获取与选入一种设备场景的物理字体有关的信息
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
lpMetrics
TEXTMETRIC,用于填充物理字体属性信息的一个结构
Top
[Amber demo]
GrayString, GrayStringByString
VB声明
Declare Function GrayString& Lib "user32" Alias "GrayStringA" (ByVal hDC As Long, ByVal hBrush As Long, ByVal lpOutputFunc As Long, ByVal lpData As Long, ByVal nCount As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long)
Declare Function GrayStringByString& Lib "user32" Alias "GrayStringA" (ByVal hDC As Long, ByVal hBrush As Long, ByVal lpOutputFunc As Long, ByVal lpData As String, ByVal nCount As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As
Long, ByVal nHeight As Long)
说明
描绘一个以灰色显示的字串。通常由Windows用于标识禁止状态。这个函数使用的是当前字体,但会忽略背景及文本颜色
返回值
Long,非零表示成功。如果TextOut函数或回调控件绘图事件返回零,那么该函数也会返回零
参数表
参数
类型及说明
hDC
Long,设备场景的句柄
hBrush
Long,用于填充灰色的一个刷子。如果为零就用当前刷子
lpOutputFunc
Long,指向一个函数的指针,该函数用于输出文本。通常设为零,表示使用TextOut函数。否则可将该参数设成一个进程地址。具体地址可用一个标准函数的AddressOf运算符返回,或者用一个回调控件的相关属性返回
lpData
Long,如果是一个字串(将lpOutputFunc设为NULL),这就表示要以灰色显示的一个字串。否则就指定一个Long型变量,将其传递给回调函数
nCount
Long,欲显示的字符数量。如果设为零,而且lpData是个字串,那么就用于计算字串的长度
X,Y
Long,将字串封闭(约束)起来的一个矩形的X,Y坐标
nWidth
Long,将字串封闭起来的一个矩形的宽度,采用设备坐标表示。如设为零,就根据字串计算出具体的值
nHeight
Long,将字串封闭起来的一个矩形的高度,采用设备坐标表示。如设为零,就
根据字串计算出具体的值
Top
[Amber demo]
PolyTextOut
VB声明
Declare Function PolyTextOut Lib "gdi32" Alias "PolyTextOutA" (ByVal hdc As Long, pptxt As POLYTEXT, cStrings As Long) As Long
说明
描绘一系列字串
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,欲在其中绘图的设备场景
pptxt
POLYTEXT,指定POLYTEXT结构数组中的第一个条目。该结构对要描绘字串的位置及内容进行了说明
cStrings
Long,pptxt数组中的条目数量
Top
[Amber demo]
RemoveFontResource
VB声明
Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" (ByVal lpFileName As String) As Long
说明
从Windows系统中删除一种字体资源。如删除的字体目前正由其他应用程序使用,则并不将其立即删除
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
lpFileName
String,一个字体资源文件的文件名
注解
删除一种字体资源后,注意必须调用一下API函数:
di% = SendMessageBynum(HWND_BROADCAST, WM_FONTCHANGE, X, Y)
其中,HWND_BROADCAST和WM_FONTCHANGE都是来自API32.TXT文件的常数。它的作用是通知所有Windows应用程序字体列表已发生了变化。
注意磁盘上的字体文件本身并不会由这个函数删除
Top
[Amber demo]
SetMapperFlags
VB声明
Declare Function SetMapperFlags Lib "gdi32" Alias "SetMapperFlags" (ByVal hdc As Long, ByVal dwFlag As Long) As Long
说明
Windows对字体进行映射时,可用该函数选择与目标设备的纵横比相符的光栅字体。请参考对GetAspectRatioFilterEx函数的解释,了解进一步的情况
返回值
Long,字体映射标志的前一个值。GDI_ERROR表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
dwFlag
Long,用ASPECT_FILTERING常数请求GDI选择与设备纵横比相符的字体
Top
[Amber demo]
SetTextAlign
VB声明
Declare Function SetTextAlign Lib "gdi32" Alias "SetTextAlign" (ByVal hdc As Long, ByVal wFlags As Long) As Long
说明
设置文本对齐方式,并指定在文本输出过程中使用设备场景的当前位置
返回值
Long,前一个文本对齐标志,GDI_ERROR表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
wFlags
Long,参考GetTextAlign函数的返回值列表
在VB里使用
针对自己修改的任何VB窗体或控件,注意确定恢复其原始的对齐排列状态。可用GetTextAlign函数了
解目前的对齐方式是什么
Top
[Amber demo]
SetTextCharacterExtra
VB声明
Declare Function SetTextCharacterExtra Lib "gdi32" Alias "SetTextCharacterExtraA" (ByVal hdc As Long, ByVal nCharExtra As Long) As Long
说明
描绘文本的时候,指定要在字符间插入的额外间距
返回值
Long,这个设备场景的前一个额外间距设置
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
nCharExtra
Long,要在字符间插入的额外空间,采用设备场景的逻辑坐标系统
在VB里使用
如改变了这个设置,注意恢复VB窗体或控件原来的字符间距设置
Top
[Amber demo]
SetTextColor
VB声明
Declare Function SetTextColor Lib "gdi32" Alias "SetTextColor" (ByVal hdc As Long, ByVal crColor As Long) As Long
说明
设置当前文本颜色。这种颜色也称为“前景色”
返回值
Long,文本色的前一个RGB颜色设定。CLR_INVALID表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
crColor
Long,新的文本色
在VB里使用
如改变了这个设置,注意恢复VB窗体或控件原始的文本颜色
Top
[Amber demo]
SetTextJustification
VB声明
Declare Function SetTextJustification Lib "gdi32" Alias "SetTextJustification" (ByVal hdc As Long, ByVal nBreakExtra As Long, ByVal nBreakCount As Long) As Long
说明
通过指定一个文本行应占据的额外空间,可用这个函数对文本进行两端对齐处理
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
nBreakExtra
Long,描绘时欲添加到字串的额外空间大小
nBreakCount
Long,用于分散额外空间的分隔字符的数量
在VB里使用
如使用了这个函数,要确定针对VB窗体或控件清除错误条件
注解
额外空间由行内各个分隔字符分摊。这里的“分隔字符”是由特定的字体定义的,通常都是空格字符。可用GetTextMetrics函数了解一种字体采用的分隔字符是什么。对文本进行两端对齐排列的时候,通常需要采取的操作步骤如下:
1、用GetTextExtentPoint32这个API函数计算字串占据的显示范围
2、决定为了使一个行两端对齐,需要加入多少额外的空间(采用逻辑坐标)。这个空间(或距离)通常等于右页边距减去文本的水平“范围”
3、计算一行文本中采用多少个间隔字符(通常是空格)
4、将额外空间以及间隔字符的数量作为参数,调用SetTextJustification函数
5、调用文本绘图(显示)函数
这个函数在内部维持着
一种错误条件,用于纠正对齐过程中出现的误差。这样一来,我们就可以区分出行内不同部分间的额外间距(如行内使用了多种字体)。具体的方法是将行分割成几个段,然后为每一段都调用这个函数。对于一个新行,必须清除这个错误条件,方法是向nBreakExtra和nBreakCount参数传递零值,然后调用这个函数
Top
[Amber demo]
TabbedTextOut
VB声明
Declare Function TabbedTextOut Lib "user32" Alias "TabbedTextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long, ByVal nTabPositions As Long, lpnTabStopPositions As Long, ByVal nTabOrigin As Long) As Long
说明
支持制表站的一个文本描绘函数。也请参考SetTextAlign函数
返回值
Long,返回字串的显示“范围”。其中,结果值的高16位代表高度,低16位代表宽度
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
x,y
Long,用逻辑坐标设置的一个点,指定字体的描绘(显示)起点
lpString
String,欲描绘的字串
nCount
Long,字串中要正式描绘出来的字符数
nTabPositions
Long,lpnTabStopPositions数组中的制表站数量。如果是零,lpnTabStopPositions也应该是NULL(需要另行创建一个声明,将参数指定成 ByVal nTabPositions& )——在这种情况下,制表站会根据当前字体的平均字符宽度设置成默认的8字符间距。如nTabPositions为1,那么制表站间距就会根据lpnTabStopPositions数组的第一个条目设置
lpnTabStopPositions
Long,指定制表站位置数组中的头一个条目。这些位置用设备坐标按升序指定。如果为负数,表示文本应该右对齐制表站,而不是默认的左对齐(仅适用于Win95)
nTabOrigin
Long,指定制表站起点。如为同一行多次调用该函数,而又希望维持相同的制表起点,这个参数就显得非常重要
Top
[Amber demo]
TextOut
VB声明
Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
说明
文本绘图函数。也请参考SetTextAlign
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hdc
Long,设备场景的句柄
x,y
Long,绘图的起点,采用逻辑坐标
lpString
String,欲描绘的字串
nCount
Long,字串中要描绘的字符数量
注解
在一个路径中,如绘图背景模式是“不透明”(opaque)——请参考SetBkMode函数,那么创建的轮廓将由字符单元格减去字符构成。如背景模式为透明,轮廓就由字符的字样本身构成
Top