c++builder自定义控件
http://docwiki.embarcadero.com/CodeExamples/XE8/en/RegisterComponents_%28C%2B%2B%29
void __fastcall SetFocusControl(TWinControl* Value); void __fastcall CMDialogChar(TWMKey& Message); void __fastcall CMTextChanged(TMessage& Message); protected: virtual void __fastcall Notification(TComponent* AComponent, TOperation Operation); virtual void __fastcall Paint(void); public: __fastcall virtual TDemoLabel(TComponent* AOwner); __published: __property Caption ; __property Color ; __property TWinControl* FocusControl = {read=FFocusControl, write=SetFocusControl, nodefault}; __property Font ; __property ParentColor ; __property ParentFont ; public: __fastcall virtual ~TDemoLabel(void) { } BEGIN_MESSAGE_MAP MESSAGE_HANDLER(CM_DIALOGCHAR, TWMKey, CMDialogChar); MESSAGE_HANDLER(CM_TEXTCHANGED, TMessage, CMTextChanged); END_MESSAGE_MAP(TGraphicControl); }; void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TDemoLabel)}; RegisterComponents("Samples", classes, 0); RegisterComponents("MySystem", classes, 0); } __fastcall TDemoLabel::TDemoLabel(TComponent *AOwner): TGraphicControl(AOwner) { FComponentStyle >> csInheritable; Width=64; Height=13; } void __fastcall TDemoLabel::Notification(TComponent *AComponent, TOperation Operation) { TGraphicControl::Notification(AComponent, Operation); if ((Operation == opRemove) && (AComponent == FFocusControl)) FFocusControl = 0; } void __fastcall TDemoLabel::SetFocusControl(TWinControl *Value) { FFocusControl = Value; // Calling FreeNotification ensures that this component // will receive an opRemove when Value is either removed // from its owner or destroyed. Value->FreeNotification(Value); } void __fastcall TDemoLabel::Paint() { TRect Rect = ClientRect; Canvas->Font = Font; Canvas->Brush->Color = Color; Canvas->FillRect(Rect); DrawText( Canvas->Handle, Caption.t_str(), Caption.Length(), &Rect, DT_EXPANDTABS | DT_WORDBREAK | DT_LEFT); } void __fastcall TDemoLabel::CMDialogChar(TCMDialogKey &Message) { if (FFocusControl != NULL && Enabled == true && IsAccel(Message.CharCode, Caption)) if (FFocusControl->CanFocus()){ FFocusControl->SetFocus(); Message.Result = 1; } } void __fastcall TDemoLabel::CMTextChanged(TMessage &Message) { Invalidate(); }