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);
}
求购