欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
VC GDI+ 文字輸出和文本繪制
文章分類(lèi):C++編程

字體是文字顯示和打印的外觀(guān)形式,它包括了文字的字樣、風(fēng)格和尺寸等多方面的屬性。適當地選用不同的字體,可以大大地豐富文字的外在表現力。例如,把文字中某些重要的字句用較粗的字體顯示,能夠體現出突出、強調的意圖。當然,文本輸出時(shí)還可使用其格式化屬性和顯示質(zhì)量來(lái)優(yōu)化文本顯示的效果。

字體屬性和字體創(chuàng )建

字體的屬性有很多,這里主要介紹字樣、風(fēng)格和尺寸三個(gè)主要屬性。

字樣是字符書(shū)寫(xiě)和顯示時(shí)表現出的特定模式,例如,對于漢字,通常有宋體、楷體、仿宋、黑體、隸書(shū)以及幼圓等多種字樣。GDI+是通過(guò)FontFamily類(lèi)來(lái)定義字樣的,例如下面的代碼:

FontFamily fontFamily(L"幼圓"); // 定義"幼圓"字樣

字體風(fēng)格主要表現為字體的粗細和是否傾斜等特點(diǎn)。GDI+為用戶(hù)提供了一些預定義的字體風(fēng)格:FontStyleRegular(正常)、FontStyleBold(加粗)、FontStyleItalic(斜體)、FontStyleBoldItalic (粗斜體)、FontStyleUnderline(下劃線(xiàn))和FontStyleStrikeout(刪除線(xiàn))。

字體尺寸是用來(lái)指定字符所占區域的大小,通常用字符高度來(lái)描述。字體尺寸可以取毫米或英寸作為單位,但為了直觀(guān)起見(jiàn),也常常采用一種稱(chēng)為點(diǎn)的單位,一點(diǎn)約折合為1/72英寸。對于漢字,還常用號數來(lái)表示字體尺寸,初號字最大,以下依次為小初、一號、小一、二號、小二??,如此類(lèi)推,字體尺寸起來(lái)越小。GDI+為用戶(hù)提供了UnitDisplay(1/75英寸)、UnitPixel(像素)、UnitPoint(點(diǎn))、UnitInch(英寸)、UnitDocument(1/300英寸)、UnitMillimeter(毫米)等字體尺寸單位。

使用GDI+中的Font類(lèi),可以直接通過(guò)構造函數創(chuàng )建一個(gè)字體對象,例如下列代碼:

Font font(&fontFamily, 12, FontStyleRegular, UnitPoint);

構造函數的第一個(gè)參數是用來(lái)指定FontFamily類(lèi)對象指針,第二參數是用來(lái)指定字體的尺寸,它的實(shí)際大小取決于第四個(gè)參數所指定的尺寸單位。第三個(gè)參數用來(lái)指定字體風(fēng)格。

為了與原來(lái)的GDI字體相兼容,Font的構造函數還有另外一種型式:

Font( HDC hdc, const LOGFONTW* logfont)

其中,hdc是用來(lái)指定一個(gè)窗口的設備環(huán)境句柄,logfon是指向LOGFONT(邏輯字體)數據結構的指針。

文本輸出

文本的最終輸出不僅依賴(lài)于文本的字體,而且還跟文本的顏色、對齊方式、字符間隔等有很大關(guān)系。GDI+只有一個(gè)輸出文本的函數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用來(lái)指定要輸出的字符串,length表示該字符串的長(cháng)度,font用來(lái)指定字體,layoutRect用來(lái)指定一個(gè)字符串所輸出的矩形區域,stringFormat用來(lái)指定文本輸出格式化屬性,origin用來(lái)指定字符串輸出的起點(diǎn)。需要注意的是,PointF和RectF類(lèi)與Point和Rect類(lèi)基本相同,所不同的是數據類(lèi)型是浮點(diǎn)而后者是INT型。brush用來(lái)指定一個(gè)畫(huà)刷,這個(gè)畫(huà)刷既可以是SolidBrush和HatchBrush,也可以是TextureBrush(紋理畫(huà)刷),甚至是漸變畫(huà)刷。例如下面的代碼,結果如圖7.14所示。



Graphics graphics( pDC->m_hDC );

FontFamily fontFamily(L"幼圓");
Font font(&fontFamily, 20, FontStyleRegular, UnitPoint);
PointF pointF(30, 10);
Image image(L"image.jpg");
TextureBrush tBrush(&image);

LinearGradientBrush linGrBrush(
Point(30, 50),
Point(100, 50),
Color(255, 255, 0, 0), 
Color(255, 0, 0, 255)); 

WCHAR string[256];
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);

需要說(shuō)明的是,在GDI+中,我們可以通過(guò)SetTextRenderingHint來(lái)控制文本輸出的質(zhì)量。例如下面的代碼,其結果如圖7.15所示。

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"沒(méi)有任何優(yōu)化處理";
WCHAR string2[] = L"字體優(yōu)化,但邊不作平滑處理";
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類(lèi)來(lái)控制這些格式屬性,通常我們調用以下幾個(gè)函數來(lái)進(jìn)行相關(guān)屬性設置。

Status SetAlignment( StringAlignment align);
Status SetLineAlignment( StringAlignment align);

該函數用來(lái)設置文本對齊方式,align可以是StringAlignmentNear(左對齊或右對齊,取決于書(shū)寫(xiě)方向是從左到右還是從右到左)、StringAlignmentCenter(居中)或StringAlignmentFar(兩端對齊)。

Status SetFormatFlags( INT flags );

該函數用來(lái)設置文本格式化標志,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"這些文字是垂直居中且是從右到左的閱讀次序, 它們是通過(guò) \
SetFormatFlags和SetAlignment來(lái)設置的!";

graphics.DrawString( string, (INT)wcslen(string), &font, 
RectF(30, 30, 150, 200), &stringFormat, &solidBrush);

 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
文本和字體
Windows GDI和GDI+編程實(shí)例剖析 (7)
VS2008使用GDI+前
一些關(guān)于GDI+的文字——概述
C#.net 地圖控件開(kāi)發(fā)(四) GDI+圖形圖像編程基礎2.
網(wǎng)站上的驗證碼是怎么產(chǎn)生的?
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久