函式功能
該函式為指定設備環境設定文字對齊標誌。函式原型
UINT SetTextAlign(HDC hdc, // 設備環境句柄
UINT fMode // 文本對齊選項
);
參數
hdc[輸入] 設備環境句柄.
fMode
[輸入] 使用下面的列表中的掩碼指定文本對齊方式。在橫向對齊和縱向對齊標誌中只能選擇一個。另外,兩個標誌只能選擇一個來改變當前的位置。
TA_BASELINE
基準點在正文的基線上。
TA_BOTTOM
基準點在限定矩形的下邊界上。
TA_TOP
基準點在限定矩形的上邊界上。
TA_CENTER
基準點與限定矩形的中心水平對齊。
TA_LEFT
基準點在限定矩形的左邊界上。
TA_RIGHT
基準點在限定矩形的右邊界上。
TA_RTLREADING
對於中東Windows版,正文從右到左的閱讀順序排列,與預設的從左到右正好相反。
只有當被選擇的字型是Hebrew或Arabic時,此值才有用。
TA_NOUPDATECP
每次文字輸出調用後當前基準點不改變。基準點是傳輸給正文輸出函式的位置。
TA_UPDATECP
每次文字輸出調用後當前基準點改變。當前位置作為基準點。
若當前字型有一條預設的垂直基線(如Kanji),下列值用於取代TA_BASELINE和TA_CENTER,各值含義為:
VTA_BASELINE
基準點在正文的基線上。
VTA_CENTER
基準點與限定矩形的中心垂直對齊。
預設值是TA_LEFT, TA_TOP和TA_NOUPDATECP。
如果函式調用成功,返回值是文字對齊方式的前一個設定;
如果函式調用失敗,返回值是GDI_ERROR。
Windows NT:若想獲得更多錯誤信息,請調用GetLastError函式。
備註
TextOut和ExtTextOut用文字對齊標誌來將一個正文字元串定位於顯示器或者其他設備。該標誌指定了基準點與限定正文的矩形的位置關係,基準點可以是當前位置,也可是傳給正文輸出函式的一個點。限定正文的矩形是正文字元串里的字元單元形成的。
最好的辦法是讓左對齊文本使用兩種標誌
SetTextAlign (hdc, GetTextAlign(hdc) & (~TA_CENTER))– 或者–
SetTextAlign (hdc,TA_LEFT | )
你也可以使用 SetTextAlign (hdc, TA_LEFT) 達到這個目的, 但是這個方法會丟失所有的垂直基線或者從右到左的設定。
速查
Windows NT:3.1及以上版本;Windows:95及以上版本;
Windows CE:不支持;
頭檔案:wingdi.h;
庫檔案:gdi32.lib。
示例
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);
}