VC GDI 程式設計的字型和文字繪製

2022-03-25 00:57:52 字數 4764 閱讀 4381

字型是文字顯示和列印的外觀形式,它包括了文字的字樣、風格和尺寸等多方面的屬性。適當地選用不同的字型,可以大大地豐富文字的外在表現力。例如,把文字中某些重要的字句用較粗的字型顯示,能夠體現出突出、強調的意圖。當然,文字輸出時還可使用其格式化屬性和顯示質量來優化文字顯示的效果。

字型屬性和字型建立

字型的屬性有很多,這裡主要介紹字樣、風格和尺寸三個主要屬性。

字樣是字元書寫和顯示時表現出的特定模式,例如,對於漢字,通常有宋體、楷體、仿宋、黑體、隸書以及幼圓等多種字樣。gdi+是通過fontfamily類來定義字樣的,例如下面的**:

fontfamily fontfamily(l/"幼圓/"); // 定義/"幼圓/"字樣

字型風格主要表現為字型的粗細和是否傾斜等特點。gdi+為使用者提供了一些預定義的字型風格:fontstyleregular(正常)、fontstylebold(加粗)、fontstyleitalic(斜體)、fontstylebolditalic (粗斜體)、fontstyleunderline(下劃線)和fontstylestrikeout(刪除線)。

字型尺寸是用來指定字元所佔區域的大小,通常用字元高度來描述。字型尺寸可以取公釐或英吋作為單位,但為了直觀起見,也常常採用一種稱為點的單位,一點約折合為1/72英吋。對於漢字,還常用號數來表示字型尺寸,初號字最大,以下依次為小初、一號、小

一、二號、小二??,如此類推,字型尺寸起來越小。gdi+為使用者提供了unitdisplay(1/75英吋)、unitpixel(畫素)、unitpoint(點)、unitinch(英吋)、unitdocument(1/300英吋)、unitmillimeter(公釐)等字型尺寸單位。

使用gdi+中的font類,可以直接通過建構函式建立乙個字型物件,例如下列**:

font font(&fontfamily, 12, fontstyleregular, unitpoint);

建構函式的第乙個引數是用來指定fontfamily類物件指標,第二引數是用來指定字型的尺寸,它的實際大小取決於第四個引數所指定的尺寸單位。第三個引數用來指定字型風格。

為了與原來的gdi字型相相容,font的建構函式還有另外一種型式:

font( hdc hdc, const logfontw* logfont)

其中,hdc是用來指定乙個視窗的裝置環境控制代碼,logfon是指向logfont(邏輯字型)資料結構的指標。

文字輸出

文字的最終輸出不僅依賴於文字的字型,而且還跟文字的顏色、對齊方式、字元間隔等有很大關係。gdi+只有乙個輸出文字的函式drawstring,它的原型如下:

drawstring( const wchar* string, int length, const font* font,

const rectf& layoutrect, const stringformat* stringformat,

const brush* brush );

drawstring( const wchar* string, int length, const font* font,

const pointf& origin, const brush* brush );

drawstring( const wchar* string, int length, const font* font,

const pointf& origin, const stringformat* stringformat,

const brush* brush);

其中,string用來指定要輸出的字串,length表示該字串的長度,font用來指定字型,layoutrect用來指定乙個字串所輸出的矩形區域,stringformat用來指定文字輸出格式化屬性,origin用來指定字串輸出的起點。需要注意的是,pointf和rectf類與point和rect類基本相同,所不同的是資料型別是浮點而後者是int型。brush用來指定乙個畫刷,這個畫刷既可以是solidbrush和hatchbrush,也可以是texturebrush(紋理畫刷),甚至是漸變畫刷。例如下面的**

graphics graphics( pdc->m_hdc );

fontfamily fontfamily(l/"幼圓/");

wcscpy(string, l/"歡迎使用gdi+!/");

graphics.drawstring(string, (int)wcslen(string), &font, pointf, &tbrush);

pointf.y += 50;

graphics.drawstring(string, (int)wcslen(string), &font, pointf,

&lingrbrush);

需要說明的是,在gdi+中,我們可以通過settextrenderinghint來控制文字輸出的質量。例如下面的**

graphics graphics( pdc->m_hdc );

fontfamily fontfamily(l/"楷體_gb2312/");

font font(&fontfamily, 30, fontstyleregular, unitpixel);

solidbrush solidbrush(color(255, 0, 0, 255));

wchar string1 = l/"沒有任何優化處理/";

wchar string2 = l/"字型優化,但邊不作平滑處理/";

wchar string3 = l/"消除走樣,且邊作平滑處理/";

graphics.settextrenderinghint(textrenderinghintsinglebitperpixel);

graphics.drawstring(

string1, (int)wcslen(string1), &font, pointf(10, 10), &solidbrush);

graphics.settextrenderinghint(textrenderinghintsinglebitperpixelgridfit);

graphics.drawstring(

string2, (int)wcslen(string2), &font, pointf(10, 50), &solidbrush);

graphics.settextrenderinghint(textrenderinghintantialiasgridfit);

graphics.drawstring(

string3, (int)wcslen(string3), &font, pointf(10, 90), &solidbrush);

文字格式化屬性

文字的格式屬性通常包括對齊方式、字元間隔以及文字調整等。gdi+提供stringformat類來控制這些格式屬性,通常我們呼叫以下幾個函式來進行相關屬性設定。

status setalignment( stringalignment align);

status setlinealignment( stringalignment align);

該函式用來設定文字對齊方式,align可以是stringalignmentnear(左對齊或右對齊,取決於書寫方向是從左到右還是從右到左)、stringalignmentcenter(居中)或stringalignmentfar(兩端對齊)。

status setformatflags( int flags );

該函式用來設定文字格式化標誌,flags可以是stringformatflagsdirectionrighttoleft(水平閱讀方向是從右向左)和stringformatflagsdirectionvertical(垂直文字)等值。例如下面的**,其結果如圖7.16所示。

graphics graphics( pdc->m_hdc );

solidbrush solidbrush(color::blue);

fontfamily fontfamily(l/"楷體_gb2312/");

font font(&fontfamily, 16, fontstyleregular, unitpoint);

stringformat stringformat;

stringformat.setformatflags( stringformatflagsdirectionrighttoleft |

stringformatflagsdirectionvertical |

stringformatflagsnofitblackbox);

stringformat.setalignment(stringalignmentcenter);

wchar string = l/"這些文字是垂直居中且是從右到左的閱讀次序, 它們是通過 //

setformatflags和setalignment來設定的!/";

graphics.drawstring( string, (int)wcslen(string), &font,

rectf(30, 30, 150, 200), &stringformat, &solidbrush);

繪製形狀和文字

繪製點 point 繪製線lint 繪製矩形 rectangle 繪製圓形 circle 繪製橢圓 或者弧線 ellipse 繪製多邊形 繪製填充多邊形 繪製文字 puttext 注 字型為 font 或 qt font 備註 linttype line aa 消除鋸齒 隨機生成線 for int ...

CSS字型和文字

字型是 文字的不同體式 或者 字的形體結構 對於英文而言,每種字型都是由一組具有獨特樣式的字母 數字和符號組成的。根據外觀,字型可以分為不同的類別 font collection 包括襯線字型 serif 無襯線字型 sans serif 和等寬字型 monospace 每一類字型可以分成不同的字型...

08 繪製形狀和文字

1 使用cv point 代表點 cv scalar 代表顏色向量 2 繪製線,矩形,圓,橢圓等基本幾何形狀 3 隨機生成與 影象上 繪製文字 4 演示 1 point表示2d平面上乙個點x,y use point p p.x 10 p.y 8 orp point 10 8 2 scalar表示四個...