DrawText
該函數在指定的矩形里寫入格式化的正文,根據指定的方法對正文格式化(擴展的制表符,字符對齊、折行等)。
int DrawText(HDC hDC, // 設備描述表句柄 LPCTSTR lpString, // 將要繪制的字符串 int nCount, // 字符串的長度 LPRECT lpRect, // 指向矩形結構RECT的指針 UINT uFormat // 正文的繪制選項 );
hdc:輸入]設備環境句柄。
lpString:[輸入]指向將被寫入的字符串的指針,如果參數nCount是-1,則字符串必須是以\0結束的。
如果uFormat包含DT_MODIFYSTRING,則函數可為此字符串增加4個字符,存放字符串的緩沖區必須足夠大,能容納附加的字符。
nCount: [輸入]指向字符串中的字符數。如果nCount為-1,則lpString指向的字符串被認為是以\0結束的,DrawText會自動計算字符數。
lpRect: [輸入/輸出]指向結構RECT的指針,其中包含文本將被置於其中的矩形的信息(按邏輯坐標)。
uFormat: [輸入]指定格式化文本的方法。它可以下列值的任意組合,各值描述如下:
值 | 說明 |
DT_BOTTOM | 將正文調整到矩形底部。此值必須和DT_SINGLELINE組合。 |
DT_CALCRECT | 決定矩形的寬和高。 如果正文有多行,DrawText使用lpRect定義的矩形的寬度,並擴展矩形的底部以容納正文的最后一行。 如果正文只有一行,則DrawText改變矩形的右邊界,以容納下正文行的最后一個字符。 出現上述任何一種情況,DrawText返回格式化正文的高度,而不是繪制正文。 |
DT_CENTER | 使正文在矩形中水平居中。 |
DT_EDITCONTROL | 復制多行編輯控制的正文顯示特性。 特殊地,為編輯控制的平均字符寬度是以同樣的方法計算的,此函數不顯示只是部分可見的最后一行。 |
DT_END_ELLIPSIS | 對於顯示的文本,如果結束的字符串的范圍不在矩形內,它會被截斷並以省略號標識。 如果一個字母不是在字符串的末尾處超出了矩形范圍,它不會被截斷並以省略號標識。 字符串不會被修改,除非指定了DT_MODIFYSTRING標志。 |
DT_EXPANDTABS | 擴展制表符,每個制表符的缺省字符數是8。 DT_WORD_ELLIPSIS, DT_PATH_ELLIPSIS和DT_END_ELLIPSIS不能和此參數一起使用 |
DT_EXTERNALLEADING | 在行的高度里包含字體的外部標頭,通常,外部標頭不被包含在正文行的高度里。 |
DT_HIDEPREFIX | 忽略正文中的前綴字符(&),並且前綴字符后面的字母不會出現下划線。其它前綴字符的調用方式不受影響。 輸入的字符串: "A&bc&&d" 正常: "Abc&d" DT_HIDEPREFIX: "Abc&d" |
DT_INTERNAL | 用系統字體來計算正文度量。 |
DT_LEFT | 正文左對齊。 |
DT_MODIFYSTRING | 修改給定的字符串來匹配顯示的正文。 此標志必須和DT_END_ELLIPSIS 或 DT_PATH_ELLIPSIS同時使用。 |
DT_NOCLIP | 無裁剪繪制。當DT_NOCLIP使用時DrawText的使用會有所加快。 |
DT_NOFULLWIDTHCHARBREAK | 在寬字符的字符串中防止行斷開,因此折行規則相當於單字符的字符串。 例如,我們可以用在棒子版的windows中,為圖標標簽提供更好的可讀性。 除非指定DT_WORDBREAK,否則此值沒有作用。 |
DT_NOPREFIX | 關閉前綴字符的處理。 通常DrawText解釋助記前綴字符,&為給其后的字符加下划線,解釋&&為顯示單個&。指定DT_NOPREFIX,這種處理被關閉。 |
DT_PATH_ELLIPSIS | 對於顯示的正文,替換字符串在橢圓中的字符,以確保結果能在合適的矩形內。 如果該字符串包含反斜杠(\)字符,DT_PATH_ELLIPSIS盡可能的保留最后一個反斜杠之后的正文。 字符串不會被修改,除非指定了DT_MODIFYSTRING標志。 |
DT_PREFIXONLY | 僅僅在(&)前綴字符的位置下繪制一個下划線。不繪制字符串中的任何其他字符。 輸入的字符串: "A&bc&&d" 正常: "Abc&d" DT_PREFIXONLY:" _ " |
DT_RIGHT | 正文右對齊。 |
DT_RTLREADING | 當選擇進設備環境的字體是希伯來文或阿拉伯文字體時,為雙向正文安排從右到左的閱讀順序都是從左到右的。 |
DT_SINGLELINE | 顯示正文的同一行,回車和換行符都不能折行。 |
DT_TABSTOP | 設置制表,參數uFormat的15"C8位(低位字中的高位字節)指定每個制表符的字符數,每個制表符的缺省字符數是8。 注意:DT_CALCRECT, DT_EXTERNALLEADING, DT_INTERNAL, DT_NOCLIP, DT_NOPREFIX值不能和DT_TABSTOP值一起使用。 |
DT_TOP | 正文頂端對齊。 |
DT_VCENTER | 使正文在矩形中垂直居中。 (DreamSmart注:此值必須和DT_SINGLELINE連用,否則GDI無法計算目的矩形) |
DT_WORDBREAK | 斷開字。當一行中的字符將會延伸到由lpRect指定的矩形的邊框時,此行自動地在字之間斷開。一個回車一換行也能使行折斷。 |
DT_WORD_ELLIPSIS | 截短不符合矩形的正文,並增加省略號。 |
編輯本段返回值
如果函數調用成功,返回值是正文的高度(邏輯單位)。如果指定了DT_VCENTER或DT_BOTTOM,返回值是lpRect->top到繪制的正文的底部的偏移值。 如果函數調用失敗,返回值是0 Windows NT:若想獲得更多錯誤信息,請調用GetLastError函數。
編輯本段備注
函數DrawText用設備環境中的字體選擇、正文顏色和背景顏色來寫正文。DrawText裁剪正文,不會出現在指定矩形的外面,除非指定了DT_NOCLIP。除非使用DT_SINGLELINE格式化,否則其余的格式都認為正文有多行。 如果選擇的字體對指定的矩形而言太大,DrawText不會試圖去換成一種小字體。 DrawText支持縱和方向均為0的字體。 設備環境的正文對齊方式必須包括TA_LEFT, TA_TOP和TA_NOUPDATECP標志。 Windows CE:如果為參數uFormat指定DT_CALCRECT值,必須為lpRect指向的RECT結構設置right和bottom成員。Windows CE不支持uFormat為DT_EXTERNALLEADING。