### 函数功能

该函数取得被选进指定设备环境的TrueType字体的字符轮廓或位图。

### 函数原型

DWORD GetGlyphOutline(HDC hdc, UINT uChar, UINT uFormat, LPGLYPHMETRICS lpgm, DWORD cbBuffer, LPVOID lpvBuffer, CONST MAT2 *lpmat2)；

### 参数

hdc：设备环境句柄。
uChar：指定被返回其数据的字符。
uFormat：指定函数取得的数据的格式。可用下列值之一：各值含义为：
GGO_BITMAP：函数获得字形位图。要得到善于内存分配的信息，参见后面备注部分。
GGO_NATIVE：函数获得光栅器（rasterrizer）的本地格式的曲线数据点，并使用字体的设计单位，当指定了此值，由lpMatrix指定的任何变换都被忽略。
GGO_METRICS：函数只获得由lpgm指定的GLYPHMETRICS结构。其余缓冲区被忽徊，此值影响函数失败时返回值的含义，参见后面的返回值部分。
GGO_GRAY2_BITMAP：函数获得含5级灰色的字形位图。
GGO_GRAY4_BITMAP：函数获得含17级灰色的字形位图。
GGO_GRAY8_BITMAP：函数获得含65级灰色的字形位图。
注意：对GGO_GRAYnBITMAP值，函数获得n*n+1级灰色的字形位图。
lpgm：指向结构GLYPHMETRICS的指针，用于描述字表在字符单元的放置。
cbBuffer：指向定缓冲区的大小，该缓冲区用于复制轮廓字符的信息。如果此值为零，函数返回需要的缓冲区大小。
lpvBuffer：指向缓冲区的指针，该缓冲区用于复制轮廓字符的信息，如果此值为NULL，函数返回需要的缓冲区大小。
lpmat2：指向MAT2结构的指针，该结构为字符信息转换矩阵。

### 返回值

如果指定了GGO_BITMAP, GGO_GRAY2_BITMAP, GGO_GRAY4_BITMAP, GGO_GRAY8_BITMAP，或GGO_NATIVE值且函数调用成功，返回值将大于0，否则，返回值是GDI_ERROR。如果指定了上述之一值，但缓冲区或地址是0，则返回需要的缓冲区的字节数。
如果GGO_METRICS被指定且函数调用失败，返回值是GDI_ERROR。
Windows NT：若想获得更多错误信息，请调用GetLastError函数。
备注：GetGlyphOutline返回的字形轮廓是一种配有网络的字形（配有网络的字形是指一种被修改的字形，使其点阵图尽可能地与字形的原始设计一致）。如果一个应用程序需要一种无修改的字形轮廓，应该在那些大小等于字体的em单位的字体中要求一个字符的字形轮廓，字体的em单位值存在于结构OUTLINETEXTMETRIC的otmEMSquare成员中。
由GetGlyphOutline指定GGO_BITMAP返回的字形位图是一种双字对齐、面向行的单色位图，当指定GGO_GRAY2_BITMAP，返回的位图是一种双字对齐、面向行的，其值在0－4之间的字节数组。当GGO_GRAY8_BITMAP指定时，返回的位图是一种双字对齐、面向行的，其值在0－16之间的字节数组。当指定GGO_GRAY8_BITMAP时，返回的位图是一种双字对齐，面向行的，其值在0－255之间的字节数组。应用程序可以指定lpMatrix参数里的2－对－2转换矩阵来将以位图格式获得的字符旋转。

### 速查

Windows NT：3.1及以上版本；Windows：95及以上版本；Windows CE：不支持；头文件：wingdi.h；库文件：gdi32.lib；Unicode：在Windows NT环境下实现为Unicode和ANSI两种版本。