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

繼承 TCustomControl 實現自訂 CheckBox 風格 (打勾改為叉號)

     編輯:VC 教學

需求來源

VCL 標準 TCheckBox 選中時顯示打勾符號 (✓),但某些業務場景需要顯示為叉號 (×)。本文提供一個完整的繼承自 TCustomControl 的 TXCheckBox 類實現碼,由 cker 編寫,支援自訂勾選顏色、三態 (未選、選中、灰態) 及完整的滑鼠/鍵盤交互。

核心實現

類別定義

class TXCheckBox : public TCustomControl
{
private:
    bool FDown;
    TCheckBoxState FState;
    bool FFocused;
    TColor FCheckColor;
public:
    __fastcall TXCheckBox(TComponent* AOwner);
protected:
    void __fastcall Paint();
    DYNAMIC void __fastcall MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y);
    DYNAMIC void __fastcall MouseUp(TMouseButton Button, TShiftState Shift, int X, int Y);
    DYNAMIC void __fastcall MouseMove(TShiftState Shift, int X, int Y);
    DYNAMIC void __fastcall KeyDown(Word &Key, TShiftState Shift);
    DYNAMIC void __fastcall KeyUp(Word &Key, TShiftState Shift);
    // ... 屬性存取方法 ...
__published:
    __property TCaption Caption = {read=GetCaption, write=SetCaption};
    __property TColor CheckColor = {read=FCheckColor, write=SetCheckColor, default=clBlack};
    __property bool Checked = {read=GetChecked, write=SetChecked, default=false};
    __property bool Down = {read=FDown, write=SetDown, default=false};
    // ... 其他標準屬性 ...
};

繪製邏輯 (Paint 方法)

  • 繪製 3D 邊框效果的方框 (白底、高光/陰影邊框)。
  • 根據 State (cbChecked, cbGrayed) 繪製紅色叉號 (兩條對角線) 或灰態填充。
  • 繪製 Caption 文字,支援焦點虛線框。

交互處理

  • MouseDown/Up/Move:處理按下、釋放、拖動時的視覺反饋與 Checked 狀態切換。
  • KeyDown/Up:支援空白鍵切換選中狀態。
  • DoEnter/DoExit:管理焦點狀態以繪製焦點框。

測試範例

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    TXCheckBox* x = new TXCheckBox(this);
    x->Parent = this;
    x->Caption = "中文測試english";
    x->CheckColor = clRed;
    x->Left = 100;
    x->Top = 100;
}

編譯運行後,即可看到一個選中顯示紅色叉號的自訂 CheckBox。

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