來自於微軟
NET技術的C++托管擴展所包含的GDI+技術功能十分強大
本文將介紹如何使用GDI+的畫刷來繪制文本
一
使用畫刷繪制文本的基本技術
本文所帶的例子程序允許用戶定義所要顯示的文本
字體尺寸
顯示文本所用的畫刷(網格畫刷或漸變畫刷)以及繪制文本的顏色等
例子代碼下載
GDIPlusTextWithBrushes
zip
下面是GDI+中使用漸變畫刷或網格畫刷繪制文本的基本步驟
在控件的繪制(Paint)事件中添加一個事件處理函數
在這個處理函數中進行繪制文本的相關處理
這樣控件才能正確地進行重繪
獲取一個圖形(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;
實例化一個字體對象
在字體類的
個構造函數中
最基本的一個構造函數只需要你提供字體名及字體的大小
在下面的例子中
創建了一個
點
Times New Roman
類的常規字體
using namespace System::Drawing;
Font* font = new Font(S
Times new Roman
FontStyle::Regular);
測量將被繪制的文本尺寸
為了繪制文本需要使用Graphics::MeasureString方法來測量文本尺寸
可以使用Graphics::MeasureString方法來完成這個任務
這個方法需要提供被測量的文本及字體對象
並返回SizeF結構對象
這個結構包含了將要進行繪制文本的尺寸
SizeF textSize = g
>MeasureString(S
My Sample Text
font);
實例畫刷對象
可以使用各種各樣的畫刷進行繪制文本包括網格畫刷線性漸變畫刷路徑漸變畫刷實體畫刷及紋理畫刷等只是在創建各個不同的實例畫刷時傳遞的參數有一些小小的不同而已對各種畫刷進行探討不是本文的內容在本文的實例中只使用兩種畫刷(網格畫刷及線性漸變畫刷)
// HatchBrush example
Brush* brush = new HatchBrush(HatchStyle::Cross
Color::Black
Color::Blue);
// LinearGradientBrush example
RectangleF* rect = __nogc new RectangleF(PointF(
)
textSize);
brush= new LinearGradientBrush(*rect
Color::Black
Color::Blue
LinearGradientMode::ForwardDiagonal);
(選項)填充背景
為了使應用程序有特色
可以在繪制文本前對背景進行顏色填充
這有兩個標准的方法
較簡單的方法是調用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);
繪制文本
一旦將所有的GDI+對象實例化後
下面所需要做的事就是調用Graphics::DrawString方法
下面的例子使用了這個方法
在這個方法裡規定了需要顯示的文本
畫刷和字體及顯示文本的位置
// Center the text on the drawing surface
g
>DrawString(txtToDisplay
>Text
font
brush
(picText
>Width
textSize
Width) /
(picText
>Height
textSize
Height) /
);
From:http://tw.wingwit.com/Article/program/net/201311/13459.html