ExtTextOut
该函式可以提供一个可选的矩形,用于裁剪或作不透明物或两者兼有。用当前选择的字型、背景颜色和正文颜色来绘製一个字元串。
基本介绍
- 中文名:ExtTextOut
- 分类:函式
- 原型:BOOL ExtTextOut
- 参数:hdc
函式原型
BOOL ExtTextOut(HDC hdc, int X, int Y, UINT fuOptions, CONST RECT *lprc, LPCTSTR lpString, UINT cbCount, CONST INT *lpDx);
参数
hdc:设备环境句柄。
X:指定用于放置字元串的基準点的逻辑X坐标。
Y:指定用于放置字元串的基準Y坐标。
fuOptions:指定如何使用应用程式定义的矩形,此参数可为下列值的组合,各值含义为:
ETO_CLIPPED:正文将裁剪到矩形中。
ETO_GLYPH_INDEX:LpString指向由GetCharacterPlacement返回的数组,如果没有进一步的特殊语言处理的要求,则此数组直接由GDI解析,仅对字型套用符号索引,但此标誌可用于点阵图和向量字型,以表示不必做进一步的语言处理,GDI套用直接处理此字元串。
ETO_OPAQUE:用当前的背景色来填充矩形。
ETO_RTLREADING:在Middle_Eastern Windows中如果指定了此值,且Hebrew或Arabic字型被选进设备环境,则此字元串用以从右到左的阅读顺序来输出。如果没有指定此值,则字元串以从左到右的顺序输出。在SetTextAlign中设定TA_RTLREADING值可获得同样的效果。为向后兼容,此值作为保留值。
ETO_GLYPH_INDEX和ETO_RTLREADING值不能在一起使用。因为ETO_GLYPH_INDEX表示所有的语言处理已经完成,函式就会忽略被指定的ETO_RTLREADING值。
注意,儘管对光栅字型而言,字元串被认为是8位值的数据,但所有的符号索引都是16位值。
lprc:指向结构RECT的指针,其中包含了用于裁剪或作不透明物矩形的尺寸。
lpString:指向将被绘製的字元串的指针,此字元串不必是以\0结束的,因为cbCount指定了其长度。
cbCount:指定字元串的字元数。
lpDx:指向可选数组的指针,其中数组里的值表示相邻字元单位开始处间距离。例如,lpDx逻辑单元分离了字元单元i和字元单元cell i+1的开始点。
返回值:如果字元串被绘製,返回值非零,如果函式调用失败,返回值是0。
Windows NT:若想获得更多错误信息,请调用GetLastError函式。
备注:指定设备环境的当前文本对齐方式设定决定了基準点如何用来安置正文。调用函式GetTextAlign可获得文本对齐方式的设定。调用SetTextAlign函式可改变文本对齐方式。
如果参数lpDx为NULL,则ExtTextOut使用字元之间的预设间隔。字元单元的起始处和由lpDx指向的数组的内容都由逻辑单元给出。一个字元单元起始处被定义为字元单元的右上角。
预设地,此函式不使用和改变当前的状态。但是当系统在指定的设备环境调用ExtTextOut应用程式可以调用SetTextAlign函式(设定其参数fMode为TA_UPDATECP)允许系统使用和改变当前状态。当此标誌设定时,系统会在随后的ExtTextOut调用中忽略X、Y参数值。
Windows CE:支持fuOptions参数取下列值:ETO_CLIPPED, ETO_OPAQUE。
速查
Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头档案:wingdi.h;库档案:gdi32.lib;Unicode:在Windows NT环境下以Unicode和ANSI两种方式实现。
示例
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxChar, cxCaps, cyChar;
TCHAR szBuffer[10];
HDC hdc;
int i;
PAINTSTRUCT ps;
TEXTMETRIC tm;
switch (message)
{
case WM_CREATE:
hdc = GetDC(hwnd);
GetTextMetrics(hdc, &tm);
cxChar = tm.tmAveCharWidth;
cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
cyChar = tm.tmHeight + tm.tmExternalLeading;
ReleaseDC(hwnd, hdc);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
for(i = 0; i < NUMLINES; i++)
{
ExtTextOut(hdc, 0, cyChar * i, 0, NULL,
devcaps[i].szDesc,
lstrlen(devcaps[i].szDesc),
NULL);
SetTextAlign(hdc, TA_RIGHT | TA_TOP);
ExtTextOut(hdc, cxChar * 47, cyChar * i, 0, NULL,
szBuffer,
wsprintf(szBuffer, TEXT("%5d"), GetDeviceCaps(hdc, devcaps[i].iIndex)),
NULL);
SetTextAlign (hdc, TA_LEFT | TA_TOP) ;
}
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0 ;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}