首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C++Builder TCanvas 類別完整指南:繪圖畫布核心功能大全

     編輯:VC 教學

TCanvas 為繪圖物件提供抽象畫布,封裝 Windows GDI 操作。標準視窗控制項(編輯框、列表框)由系統繪製不需畫布;自繪控制項、圖像處理、列印輸出皆仰賴 TCanvas。兩大子類別:TControlCanvas(控制項畫布)、TMetafileCanvas(繪圖元檔畫布)。

核心屬性

屬性型別說明
BrushTBrush*填充屬性:顏色、樣式(實心、斜線、圖案等)。
PenTPen*筆刷屬性:顏色、寬度、樣式(實線、虛線、點線等)。
FontTFont*文字字體:名稱、大小、顏色、樣式(粗體、斜體等)。
HandleHDC底層 Windows GDI 裝置內容控制碼,進階操作用。
PenPosTPoint目前筆刷位置(MoveTo/LineTo 更新)。
PixelsTColor __property Pixels[int X, int Y]像素級顏色存取(含邊界檢查)。
ClipRectTRect裁剪矩形邊界,繪圖輸出限制於此區域。
CopyModeTCopyMode位圖複製模式(cmSrcCopy, cmSrcAnd 等)。
LockCountint畫布鎖定計數(Lock/Unlock/TryLock 管理)。

主要繪圖方法

分類方法說明
基本圖形Rectangle繪製矩形(用 Pen 框線、Brush 填充)。
RoundRect繪製圓角矩形。
Ellipse繪製橢圓/圓形。
Arc繪製橢圓弧段。
Chord繪製弦弧封閉圖形(弧+弦)。
Pie繪製扇形(弧+兩半徑)。
線條與多邊形MoveTo(x,y)移動筆刷位置。
LineTo(x,y)從目前位置畫直線到指定點。
Polyline(points, count)連續畫線穿越點陣列。
Polygon(points, count)繪製封閉多邊形。
貝茲曲線PolyBezier繪製多段貝茲曲線。
PolyBezierTo繪製並更新 PenPos。
FillRect(rect)用 Brush 填充矩形。
填充與色彩FloodFill(x,y,color,style)區域填滿(邊界/表面模式)。
BrushCopy位圖透明複製到矩形。
文字輸出TextOut(x,y,text)在指定點輸出文字。
TextRect(rect, x, y, text)在裁剪矩形內輸出文字。
TextWidth/Height/Extent取得文字寬/高/尺寸。
圖像操作Draw(x,y,graphic)繪製圖像(TGraphic 衍生類)。
StretchDraw(rect, graphic)拉伸繪製圖像填滿矩形。
CopyRect(destRect, srcCanvas, srcRect)從另一畫布複製矩形區域。
其他FrameRect, DrawFocusRect, Refresh, Lock/Unlock/TryLock框線、焦點框、刷新 GDI 物件、鎖定畫布防重入。

實用範例:自繪漸層背景


void __fastcall TForm1::FormPaint(TObject *Sender) {
    TRect r = ClientRect;
    for (int y = r.Top; y < r.Bottom; y++) {
        int r = 255 * y / r.Height();
        int g = 128;
        int b = 255 * (r.Height() - y) / r.Height();
        Canvas->Pen->Color = RGB(r, g, b);
        Canvas->MoveTo(r.Left, y);
        Canvas->LineTo(r.Right, y);
    }
}

效能與最佳實踐

  • 大量繪圖操作前呼叫 Lock(),結束後 Unlock(),減少 GDI 物件選入/選出開銷。
  • 使用 BeginUpdate/EndUpdate 配合雙緩衝(DoubleBuffered = true)消除閃爍。
  • 重複使用 TBrush/TPen/TFont 物件,避免迴圈中頻繁建構/銷毀。
  • 高效能遊戲/即時繪圖請改用 Direct2D、OpenGL 或 TBitmap 離屏繪圖後一次 Draw 上螢幕。

TCanvas 是 VCL 繪圖核心,熟練其 API 能實現豐富視覺效果與自訂控制項。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved