如果不僅僅想指定字符內(nèi)容輸出的起始坐標(biāo),還想整體控制全部?jī)?nèi)容的位置,以及內(nèi)容的格式,可以嘗試 drawtex 那函數(shù)。
其函數(shù)原型如下:
int drawtext( LPCTSTR str, RECT* pRect, UINT uFormat);
int drawtext( TCHAR c, RECT* pRect, UINT uFormat);
前者是輸出字符串,后者是輸出單個(gè)字符。我們重點(diǎn)來(lái)說(shuō)一下第二個(gè)參數(shù),這是一個(gè) RECT 結(jié)構(gòu)體類(lèi)型的結(jié)構(gòu)體指針,其結(jié)構(gòu)原型如下:
typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
它指定的矩形區(qū)域的指針。說(shuō)白了就是四個(gè)值的結(jié)構(gòu)體,分別表示了這個(gè)矩形區(qū)域的左上角位置、右下角位置,即鎖定了這片區(qū)域。
再來(lái)看第三個(gè)參數(shù),UINT uFormat 是一個(gè)數(shù)字,它由多個(gè)可以表示字體風(fēng)格的宏組成,這些樣式可以自由組合,根據(jù)官方說(shuō)明,其所有風(fēng)格如下:
標(biāo)志 | 描述 |
DT_BOTTOM | 調(diào)整文字位置到矩形底部,僅當(dāng)和 DT_SINGLELINE 一起使用時(shí)有效。 |
DT_CALCRECT | 檢測(cè)矩形的寬高。如果有多行文字,drawtext 使用 pRect 指定的寬度,并且擴(kuò)展矩形的底部以容納每一行文字。如果只有一行文字,drawtext 修改 pRect 的右邊以容納最后一個(gè)文字。無(wú)論哪種情況,drawtext 都返回格式化后的文字高度,并且不輸出文字。 |
DT_CENTER | 文字水平居中。 |
DT_EDITCONTROL | 以單行編輯的方式復(fù)制可見(jiàn)文本。具體的說(shuō),就是以字符的平均寬度為計(jì)算依據(jù),同時(shí)用這個(gè)方式應(yīng)用于編輯控制,并且這種方式不顯示可見(jiàn)部分的最后一行。 |
DT_END_ELLIPSIS | 對(duì)于文本顯示,如果字符串的末字符不在矩形內(nèi),它會(huì)被截?cái)嗖⒁允÷蕴?hào)標(biāo)識(shí)。 如果是一個(gè)單詞而不是一個(gè)字符,其末尾超出了矩形范圍,它不會(huì)被截?cái)唷?br/>字符串不會(huì)被修改,除非指定了 DT_MODIFYSTRING 標(biāo)志。 |
DT_EXPANDTABS | 展開(kāi) TAB 符號(hào)。 默認(rèn)每個(gè) TAB 占8個(gè)字符位置。注意,DT_WORD_ELLIPSIS、DT_PATH_ELLIPSIS 和 DT_END_ELLIPSIS 不能和 DT_EXPANDTABS 一起用。 |
DT_EXTERNALLEADING | 在行高里包含字體的行間距。通常情況下,行間距不被包含在正文的行高里。 |
DT_HIDEPREFIX | Windows 2000/XP: 忽略文字中的前綴字符(&),并且前綴字符后面的字符不會(huì)出現(xiàn)下劃線。其他前綴字符仍會(huì)被處理。例如: 輸入字符串: "A&bc&&d" |
DT_INTERNAL | 使用系統(tǒng)字體計(jì)算文字的寬高等屬性。 |
DT_LEFT | 文字左對(duì)齊。 |
DT_MODIFYSTRING | 修改指定字符串為顯示出的正文。僅當(dāng)和 DT_END_ELLIPSIS 或 DT_PATH_ELLIPSIS 標(biāo)志同時(shí)使用時(shí)有效。 |
DT_NOCLIP | 使輸出文字不受 pRect 裁剪限制。使用 DT_NOCLIP 會(huì)使 drawtext 執(zhí)行稍快一些。 |
DT_NOFULLWIDTHCHARBREAK | Windows 2000/XP: 防止換行符插入到 DBCS (double-wide character string,即寬字符串),換行規(guī)則相當(dāng)于 SBCS 字符串。僅當(dāng)和 DT_WORDBREAK 一起使用時(shí)有效。例如,漢字就是寬字符,設(shè)置該標(biāo)志后,連續(xù)的漢字會(huì)像英文單詞一樣不被換行符中斷。 |
DT_NOPREFIX | 關(guān)閉前綴字符的處理。通常,DrawText 解釋前綴轉(zhuǎn)義符 & 為其后的字符加下劃線,解釋 && 為顯示單個(gè) &。指定 DT_NOPREFIX,這種處理被關(guān)閉。 例如:輸入字符串: "A&bc&&d" 通常輸出: "Abc&d"DT_NOPREFIX: "A&bc&&d" |
DT_PATH_ELLIPSIS | 對(duì)于顯示的文字,用省略號(hào)替換字符串中間的字符以便容納于矩形內(nèi)。如果字符串包含反斜杠(\),DT_PATH_ELLIPSIS 盡可能的保留最后一個(gè)反斜杠后面的文字。 字符串不會(huì)被修改,除非指定了DT_MODIFYSTRING標(biāo)志。 |
DT_PREFIXONLY | Windows 2000/XP:僅僅在(&)前綴字符的位置下繪制一個(gè)下劃線。不繪制字符串中的任何其他字符。例如: 輸入字符串: "A&bc&&d" 通常輸出: "Abc&d"DT_PREFIXONLY: " _ " |
DT_RIGHT | 文字右對(duì)齊。 |
DT_RTLREADING | 設(shè)置從右向左的閱讀順序(當(dāng)文字是希伯來(lái)文或阿拉伯文時(shí))。默認(rèn)的閱讀順序是從左向右。 |
DT_SINGLELINE | 使文字顯示在一行?;剀?chē)和換行符都無(wú)效。 |
DT_TABSTOP | 設(shè)置 TAB 制表位。uFormat 的 15–8 位指定 TAB 的字符寬度。默認(rèn) TAB 表示 8 個(gè)字符寬度。注意,DT_CALCRECT、DT_EXTERNALLEADING、DT_INTERNAL、DT_NOCLIP 和 DT_NOPREFIX 不能和 DT_TABSTOP 一起用。 |
DT_TOP | 文字頂部對(duì)齊。 |
DT_VCENTER | 文字垂直居中。僅當(dāng)和 DT_SINGLELINE 一起使用時(shí)有效。 |
DT_WORDBREAK | 自動(dòng)換行。當(dāng)文字超過(guò)右邊界時(shí)會(huì)自動(dòng)換行(不拆開(kāi)單詞)?;剀?chē)符同樣可以換行。 |
DT_WORD_ELLIPSIS | 截去無(wú)法容納的文字,并在末尾增加省略號(hào)。 |
三個(gè)參數(shù)都介紹完,那么可以試試了,比如我們需要在0, 0, 200, 200這個(gè)區(qū)域里,寫(xiě)一個(gè)默認(rèn)白色,背景亮紅色的字,且左右和上下都居中顯示,那么可以使用DT_CENTER、DT_VCENTER 、DT_SINGLELINE三個(gè)參數(shù)用按位或|連接,完整代碼如下:
//www.sztianhecheng.cn #include <graphics.h> // 引用圖形庫(kù)頭文件 #include <conio.h> int main() { int a; char str[100]="www.sztianhecheng.cn"; initgraph(640, 480); // 創(chuàng)建繪圖窗口,大小為 640x480 像素 RECT r = {0, 0, 200, 200}; setbkcolor(LIGHTRED); drawtext(str, &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE); getch(); // 按任意鍵繼續(xù) closegraph(); // 關(guān)閉繪圖窗口 return 0; }
默認(rèn)背景色是和窗口黑色是一樣的,我們這里用setbkcolor改了背景色,最終效果如圖:
大家可以再更改字體顏色、其他背景色,以及矩陣大小,還有第三個(gè)參數(shù)來(lái)調(diào)整文字的樣式
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程
只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門(mén)課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程