函式原型
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);
}