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

C++ Builder 實作非矩形異形按鈕 (圓形、三角形等)

     編輯:VC 教學

原理:視窗區域

Windows 95 起支援視窗區域,決定視窗可見/可點擊範圍。按鈕 (TButton) 也是視窗,可用 SetWindowRgn 設定任意形狀區域。區域建立函數:CreateEllipticRgn (橢圓/圓)、CreatePolygonRgn (多邊形)、CreateRectRgn、CreateRoundRectRgn;複雜形狀可用 CombineRgn 組合。

實作步驟

  1. 在表單 OnCreate 建立區域句柄。
  2. 呼叫 SetWindowRgn(Button->Handle, hRgn, TRUE) 套用 (TRUE 表重繪)。
  3. 注意:區域句柄交給系統後,不得再刪除或修改,否則程式會崩潰。

程式碼範例:圓形與三角形按鈕

// 表單頭檔宣告
private: POINT TrPoint[3];

// OnCreate
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    // 圓形按鈕 (設計時設為正方形)
    HRGN hRgnR = CreateEllipticRgn(0, 0, RButton->Width, RButton->Height);
    SetWindowRgn(RButton->Handle, hRgnR, TRUE);

    // 三角形按鈕
    TrPoint[0].x = TButton->Width / 2; TrPoint[0].y = 0;
    TrPoint[1].x = 0;                   TrPoint[1].y = TButton->Height;
    TrPoint[2].x = TButton->Width;      TrPoint[2].y = TButton->Height;
    HRGN hRgnT = CreatePolygonRgn(TrPoint, 3, ALTERNATE);
    SetWindowRgn(TButton->Handle, hRgnT, TRUE);
}

座標以按鈕客戶區左上角為原點 (0,0)。設計時按鈕仍為矩形,運行時才變形。建議將表單背景設深色、按鈕 Cursor = crCross 以明顯展示效果。

穩定性提醒

區域句柄一旦 SetWindowRgn 成功,系統接管其生命週期,絕不可再呼叫 DeleteObject 或修改該句柄,否則會導致不可預期的崩潰。程式設計首重穩定,視覺效果其次。

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