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

C++Builder 圓形/三角形按鈕實現:CreateEllipticRgn/CreatePolygonRgn + SetWindowRgn

     編輯:VC 教學

原理

Windows 95+ 支援視窗區域,決定可見/點擊/繪製範圍。按鈕 (`HWND`) 套用非矩形區域即成為異形按鈕。

兩步驟

  1. 建立區域:`CreateEllipticRgn` (圓/橢圓)、`CreatePolygonRgn` (多邊形)、`CreateRoundRectRgn` (圓角矩形);複雜形狀用 `CombineRgn` 組合。
  2. 套用區域:`SetWindowRgn(btn->Handle, hRgn, TRUE)`,`TRUE` 觸發重繪。

完整代碼 (FormCreate)


// 圓形按鈕 (設計時設為正方形)
HRGN hRgnRound = CreateEllipticRgn(0, 0, RButton->Width, RButton->Height);
SetWindowRgn(RButton->Handle, hRgnRound, TRUE);

// 三角形按鈕
POINT pts[3] = {
    {TButton->Width/2, 0},
    {0, TButton->Height},
    {TButton->Width, TButton->Height}
};
HRGN hRgnTri = CreatePolygonRgn(pts, 3, ALTERNATE);
SetWindowRgn(TButton->Handle, hRgnTri, TRUE);

關鍵細節

  • 座標系統:按鈕客戶區左上角為 (0,0),右下角為 (Width, Height)。
  • 區域句柄套用後 **不可再操作/刪除**,系統接管,否則崩潰。
  • 游標僅在區域內變形,完美符合視覺邊界。
  • 美化建議:用 `TBitBtn`/`TSpeedButton` + `Glyph` 貼圖,`Flat=true` 去邊框。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved