如何在 BCB 中旋轉(zhuǎn)并輸出文字
發(fā)表時(shí)間:2024-02-16 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]有很多文章介紹如何在 VC 中輸出旋轉(zhuǎn)文字,但卻很少見到哪篇文章介紹在 BCB 中產(chǎn)生類似效果的。。以至于很多人認(rèn)為在 BCB 中是無法做到類似效果的,當(dāng)然這些人就有理由在那里口口聲聲地說 BCB 如何如何的差勁了!這個(gè)當(dāng)然和 BCB 本身那套圖形組件的設(shè)計(jì)是有很大關(guān)系的。VCL 圖形組件封裝了 ...
有很多文章介紹如何在 VC 中輸出旋轉(zhuǎn)文字,但卻很少見到哪篇文章介紹在 BCB 中產(chǎn)生類似效果的。。以至于很多人認(rèn)為在 BCB 中是無法做到類似效果的,當(dāng)然這些人就有理由在那里口口聲聲地說 BCB 如何如何的差勁了!
這個(gè)當(dāng)然和 BCB 本身那套圖形組件的設(shè)計(jì)是有很大關(guān)系的。
VCL 圖形組件封裝了 WINDOWS 圖形設(shè)備接口(GUI),使得在 WINDOWS 程序設(shè)計(jì)中添加圖形變得很容易。BCB 的設(shè)計(jì)的確很優(yōu)秀!它的意圖是將 VCL 圖形組件 設(shè)計(jì)成三個(gè)層次:
最高層:繪制線條和圖形,比如:MoveTo, LineTo, Rectangle, and Ellipse
輸出并控制文本,比如:TextOut, TextHeight, TextWidth, and TextRect
填充形狀,比如:FillRect and FloodFill
中層: 定制輸出的文本和圖形,通過控制以下屬性:Pen, Brush, and Font,Pixels
復(fù)制以及合并圖形,比如:Draw, StretchDraw, BrushCopy, and CopyRect 方法; CopyMode 屬性
底層: 直接調(diào)用 WINDOWS 的 GDI 函數(shù),VCL 圖形組件中提供了一個(gè) Handle 屬性,通過它,你能控制一切!
BCB 的用戶絕大多數(shù)只會(huì)使用高層和中層的一些方法和屬性,他們壓根不知道還有一個(gè)什么 Handle 屬性!針對這些用戶,以及那些對 BCB 有異議的人,我提供了下面這個(gè)例子來說明 BCB 的強(qiáng)大以及易用性。
很簡單,幾句代碼:
void __fastcall TForm1::FormPaint(TObject *Sender)
{
LOGFONT lf;
GetObject(Canvas->Font->Handle,
sizeof (LOGFONT),
&lf);
lf.lfEscapement = 450; //set to 450 to make 45 degree angle
lf.lfOrientation = 450;
lf.lfOutPrecision = OUT_TT_ONLY_PRECIS;
Canvas->Font->Handle = CreateFontIndirect (&lf);
Canvas->Brush->Style = bsClear;
Canvas->Pen->Color=clRed;
Canvas->TextOut (20, 120, "WOW!! Angled text!");
}
怎么樣?是不是很簡單啊。。。我記得在 VC 中單定義一個(gè)字體變量就要十多個(gè)參數(shù)呢!下面我們來簡單地分析一下這個(gè)例子:
第一句:LOGFONT lf;
LOGFONT 變量能完全地控制了字體的屬性,在 wingdi.h 中被定義為:typedef LOGFONTA LOGFONT; 而 LOGFONTA 定義為:
typedef struct tagLOGFONTA
{
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
CHAR lfFaceName[LF_FACESIZE];
} LOGFONTA;
第二句:
GetObject(Canvas->Font->Handle, //看!用到 Handle 屬性了吧!這句用來取得畫布字體的句柄
sizeof (LOGFONT), //這句取得 LOGFONT 的 SIZE
&lf);
下面幾句通過調(diào)整 LOGFONT 的屬性來控制字體
lf.lfEscapement = 450; //set to 450 to make 45 degree angle
lf.lfOrientation = 450;
lf.lfOutPrecision = OUT_TT_ONLY_PRECIS;
下面創(chuàng)建了一個(gè)新的字體,并且用來設(shè)置 Canvas->Font 的字體
Canvas->Font->Handle = CreateFontIndirect (&lf);
Canvas->Brush->Style = bsClear;
Canvas->Pen->Color=clRed;
Canvas->TextOut (20, 120, "WOW!! Angled text!");
就這么簡單。。。在底層控制其他的圖形也類似于這種方法,大家不仿試試:)