GDI+ 區域 (TGPRegion) 功能強大,但有時需配合傳統 GDI 函數 (如 FrameRgn、FillRgn、InvertRgn) 使用。TGPRegion.GetHRGN(Graphics) 可將 GDI+ 區域轉換為 GDI 區域句柄 (HRGN),實現無縫互操作。
TGPRegion (此例為矩形區域)。TGPGraphics.FillRegion 填充圖案刷。rgn.GetHRGN(g) 取得 HRGN (需傳入 Graphics 以獲取裝置上下文)。FrameRgn(Canvas.Handle, HRGN, Brush.Handle, 2, 2) 繪製紅色邊框。DeleteObject(HRGN) 釋放 GDI 物件,避免洩漏。procedure TForm1.FormPaint(Sender: TObject);
var g: TGPGraphics; b: TGPBrush; rgn: TGPRegion; RegionHandle: HRGN;
begin
g := TGPGraphics.Create(Canvas.Handle);
b := TGPHatchBrush.Create(HatchStyleDiagonalCross, aclSilver, aclLemonChiffon);
rgn := TGPRegion.Create(MakeRect(40, 40, ClientWidth-80, ClientHeight-80));
try
g.FillRegion(b, rgn);
RegionHandle := rgn.GetHRGN(g);
Canvas.Brush.Color := clRed;
FrameRgn(Canvas.Handle, RegionHandle, Canvas.Brush.Handle, 2, 2);
DeleteObject(RegionHandle); // 關鍵:釋放 GDI 區域句柄
finally
rgn.Free; b.Free; g.Free;
end;
end;
斜十字影線填充區域,外加紅色 2px 邊框 (GDI FrameRgn 繪製):

GetHRGN 建立的 HRGN 屬於 GDI 物件,**必須手動 DeleteObject**,GDI+ 不會自動管理。TGPGraphics 必須有效 (已建立、未釋放),用於獲取 HDC 進行座標轉換。