中使用創建特效字體覆蓋
來自于微軟.NET技術的C++托管擴展所包含的GDI+技術功能十分強大,本文將介紹如何使用GDI+的畫刷來繪制文本。
一、使用畫刷繪制文本的基本技術
本文所帶的例子程序允許用戶定義所要顯示的文本、字體尺寸、顯示文本所用的畫刷(格畫刷或漸變畫刷)以及繪制文本的顏色等。例子代碼下載:p
下面是GDI+中使用漸變畫刷或格畫刷繪制文本的基本步驟:
1、 在控件的繪制(Paint)事件中添加一個事件處理函數。
在這個處理函數中進行繪制文本的相關處理,這樣控件才能正確地進行重繪。
2、 獲取一個圖形(Graphics)對象。
正如我們所熟悉的設備上下文一樣,圖形對象是NET封裝的一個繪制平面,例如,當在一個PictureBox控件上進行繪制時,可以調用PictureBox::CreateGraphics方法來獲取一個Graphics對象,并在控件上繪圖時使用這個圖形(Graphics)對象。互聯上有很多例子都是這么做的,但是,有一個問題是,這樣得到的Graphics對象不是永久對象,如果用戶從當前程序轉到另一個應用程序并再次返回時,這個控件將無法正確地進行重繪。所以 ,要得當圖形對象應當使用傳遞給控件Paint方法的PaintEventArgs對象中的Graphics對象,代碼如下所示:
private: System::Void picText_Paint(System::Object * sender,
System::Windows::Forms::PaintEventArgs * e)
{
...
Graphics* g = e-Graphics;
3、實例化一個字體對象
在字體類的13個構造函數中,最基本的一個構造函數只需要你提供字體名及字體的大小。在下面的例子中,創建了一個20點,\"Times New Roman\"類的常規字體:
using namespace System::Drawing;
...
Font* font = new Font(S\"Times new Roman\", 20, FontStyle::Regular);
4、測量將被繪制的文本尺寸
為了繪制文本需要使用Graphics::MeasureString方法來測量文本尺寸。可以使用Graphics::MeasureString方法來完成這個任務。這個方法需要提供被測量的文本及字體對象,并返回SizeF結構對象,這個結構包含了將要進行繪制文本的尺寸。
SizeF textSize = g-MeasureString(S\"My Sample Text\", font);
5、實例畫刷對象
可以使用各種各樣的畫刷進行繪制文本,包括格畫刷、線性漸變畫刷、路徑漸變畫刷、實體畫刷及紋理畫刷等,只是在創建各個不同的實例畫刷時傳遞的參數有一些小小的不同而已。對各種畫刷進行探討不是本文的內容,在本文的實例中只使用兩種畫刷(格畫刷及線性漸變畫刷)。
40,089 // HatchBrush example
Brush* brush = new HatchBrush(HatchStyle::Cross,
Color::Black, Color::Blue);
// LinearGradientBrush example
RectangleF* rect = __nogc new RectangleF(PointF(0, 0), textSize);
brush= new LinearGradientBrush(*rect, Color::Black, Color::Blue,
LinearGradientMode::ForwardDiagonal);
6、(選項)填充背景
為了使應用程序有特色,可以在繪制文本前對背景進行顏色填充,這有兩個標準的方法。較簡單的方法是調用Graphics::Clear方法并定義將使用的顏色;但是有時需要更高級的控制,這時候需要使用Graphics::FillRectange方法。
Graphics::FillRectange方法允許開發人員規定所選擇的畫刷對象并定義確切的矩形坐標位置。關于畫刷對象,可以使用實例化的自定義畫刷或者是系統畫刷SystemBrushes,系統畫刷定義了若干屬性成員,它們是實心畫刷,各自用來表現窗口的不同的元素,包括激活的邊框及標題條等。
// Use the Windows-defined color for controls
// and explicitly state the rectangle coordinates
g-FillRectangle(SystemBrushes::Control, picText-Left, picText-Top,
picText-Right - picText-Left, picText-Bottom - picText-Top);
// Color the entire drawing surface using White
g-Clear(Color::White);
7、繪制文本
一旦將所有的GDI+對象實例化后,下面所需要做的事就是調用Graphics::DrawString方法。下面的例子使用了這個方法,在這個方法里規定了需要顯示的文本、畫刷和字體及顯示文本的位置。
// Center the text on the drawing surface
g-DrawString(txtToDisplay-Text, font, brush,
(picText-Width - dth) / 2,
(picText-Height - ight) / 2);
如何調理兒童脾胃虛弱玉林好醫院白癜風
術后營養品有哪些
- 朱單偉又訂婚了,女方畢恭畢敬向大衣哥敬茶,正式改口叫“小弟”
- 想申請TOP商學院畢業生必不可少的,你還不知道?
- “電視點名表揚”4位流量藝人,易烊千璽上榜,唯一的歌星是她
- 郵儲銀行濟寧市分行實行員工分類差異化管理者, 持續開展案防“月月考”工作
- 奠基石百年學府!曲師大舉行曲阜校區擴建項目竣工儀式
- 對話名家 | 馬平:把生命的卻是放進故事中
- 蘋果VR/AR頭盔曝光 傳了10年的死訊終于要實現了嗎?
- 人到了一定的年齡,才知道太過善良,多半得不償失!
- 拍好人像設備很重要,看看這三款手機展示出如何?
- 祥碩將發表USB 4主機控制器芯片組
- 高圓圓3歲女兒罕見出鏡!探班外婆抱一起扭來扭去,穿搭太可愛
- 2022年上半年深圳10+1區GDP排行曝光!深圳宣布將全面加大投資力度