熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VC++.NET中使用GDI+創建特效字體

2022-06-13   來源: .NET編程 
來自於微軟NET技術的C++托管擴展所包含的GDI+技術功能十分強大本文將介紹如何使用GDI+的畫刷來繪制文本

  一使用畫刷繪制文本的基本技術

  本文所帶的例子程序允許用戶定義所要顯示的文本字體尺寸顯示文本所用的畫刷(網格畫刷或漸變畫刷)以及繪制文本的顏色等例子代碼下載GDIPlusTextWithBrusheszip

  下面是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(STimes new Roman FontStyle::Regular);
  測量將被繪制的文本尺寸

  為了繪制文本需要使用Graphics::MeasureString方法來測量文本尺寸可以使用Graphics::MeasureString方法來完成這個任務這個方法需要提供被測量的文本及字體對象並返回SizeF結構對象這個結構包含了將要進行繪制文本的尺寸

SizeF textSize = g>MeasureString(SMy 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 Windowsdefined 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 textSizeWidth) /
(picText>Height textSizeHeight) / );


From:http://tw.wingwit.com/Article/program/net/201311/13459.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.