C++builder自绘控件框架
本文地址:http://tongxinmao.com/Article/Detail/id/198
http://blog.csdn.net/chinayu2007/article/details/48244769
#ifndef __switch1__ #define __switch1__ #include "gdi.h" //自定义GDI+函数库 typedef void __fastcall(__closure * TMyEvent)(int a,int b);//多个参数事件类型 class TSwitchButton : public TGraphicControl { private: int m_left; int m_top; int m_width; int m_height; ::Graphics::TBitmap * m_background_bmp; ::Graphics::TBitmap * m_active_bmp; TNotifyEvent FOnClick;//定义事件类型,仅一个参数Sender unsigned int window_color;//设置背景色,用于控件透明 protected: BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, MouseLeave) END_MESSAGE_MAP(TGraphicControl) void __fastcall MouseLeave(TMessage & msg); public: unsigned int background_start_color; //背景色 unsigned int background_end_color; unsigned int foreground_start_color; unsigned int foreground_end_color; void SetControlTransparentColor(unsigned int color);//修改控件透明色 bool Status; void Setsize(TRect & r); void Draw(); virtual void __fastcall Paint(void); DYNAMIC void __fastcall MouseDown(TMouseButton Button, Classes::TShiftState Shift, int X, int Y); DYNAMIC void __fastcall MouseMove(Classes::TShiftState Shift, int X, int Y); DYNAMIC void __fastcall MouseUp(TMouseButton Button, Classes::TShiftState Shift, int X, int Y); __fastcall TSwitchButton(TComponent* AOwner); __fastcall ~TSwitchButton(); __property Left ; __property Top ; __property Width ; __property Height ; __published: __property TNotifyEvent OnClick={read=FOnClick,write=FOnClick};//声明成属性器,方便调用 }; //构造函数 __fastcall TSwitchButton::TSwitchButton(TComponent* AOwner):TGraphicControl(AOwner) { m_background_bmp = new ::Graphics::TBitmap; m_active_bmp = new ::Graphics::TBitmap; this->Parent =(TWinControl *) AOwner; GdiInit(); } void TSwitchButton::Setsize(TRect & r) { m_background_bmp->Width = r.Width(); m_background_bmp->Height = r.Height(); m_active_bmp->Width = r.Width()/2-2; m_active_bmp->Height = r.Height()-2; m_left = r.left; m_top = r.top; m_width = r.Width(); m_height = r.Height(); this->Left = m_left; this->Top = m_top; this->Width = m_width; this->Height = m_height; //----------------------------------------------------- GdiCreateHandle1(m_background_bmp->Canvas->Handle); GdiPen(0xffff0000,1); GdiDrawRoundRect(0,0,m_width-1,m_height-1,30,30); GdiReleaseGraphics(); } void TSwitchButton::Draw()//绘图集中操作函数 { m_active_bmp->Assign(m_background_bmp);//复制背景 GdiCreateHandle1(m_active_bmp->Canvas->Handle); //...绘图功能函数 GdiReleaseGraphics(); } void __fastcall TSwitchButton::Paint(void) { TRect a(0,0,m_width,m_height); TRect b(0,0,m_width,m_height); Canvas->CopyMode = SRCCOPY; Canvas->CopyRect(a,m_background_bmp->Canvas,b); } void __fastcall TSwitchButton::MouseDown(TMouseButton Button, Classes::TShiftState Shift, int X, int Y) { Paint(); if(FOnClick)//激活自定义事件 { FOnClick(this);//调用点击外部挂接的事件 } } __fastcall TSwitchButton::~TSwitchButton() { delete m_background_bmp; delete m_active_bmp; GdiClose(); } void TSwitchButton::SetControlTransparentColor(unsigned int color) { window_color = color; Setsize(TRect(m_left,m_top,m_width+m_left,m_height+m_top)); Draw(); Paint(); } void __fastcall TSwitchButton::MouseLeave(TMessage & msg) { //... Draw(); Paint(); } #endif
上一篇:mingw32 mingw64 msys cygwin TDM-GCC
下一篇:C++builder彩色汽泡提示