void __fastcall TGmButton::CreateParams(TCreateParams & Params)
{
TButton::CreateParams(Params);
Params.Style |= BS_OWNERDRAW;//修改风格
}
void __fastcall TGmButton::CNDrawItem(TWMDrawItem &Message)//对消息进行拦截
{
DrawItem(*Message.DrawItemStruct);
Message.Result = 1;
}
void __fastcall TGmButton::DrawItem(const TDrawItemStruct diStruct)
{
FCanvas->Handle = diStruct.hDC;
try
{
// Mouse over or not
// TPoint pt1 = Parent->ClientToScreen(Point(Left, Top));
// TPoint pt2 = Parent->ClientToScreen(Point(Left + Width, Top + Height));
// TRect BtnRect = Rect(pt1,pt2);
// TPoint CursorPos;
// GetCursorPos(&CursorPos);
// FIsMouseOver = PtInRect(&BtnRect,CursorPos);
bool bIsDown = ((diStruct.itemState & ODS_SELECTED) != 0);
// bool bIsDefault = ((diStruct.itemState & ODS_FOCUS) != 0);
TColor clDeep = FDeepColor;
TColor clLight = FLightColor;
TColor clBorder = FBorderColor;
if(bIsDown)
{
clDeep = LightenColor(clDeep);
clLight = LightenColor(clLight);
clBorder = LightenColor(clBorder);
}
FCanvas->Brush->Color = clDeep;
PaintFadeColor(FCanvas,clLight,clDeep,2,2,Width-2,Height/4);
PaintFadeColor(FCanvas,clDeep,clLight,2,Height/4,Width-2,Height-1);
FCanvas->Brush->Style = bsClear;
FCanvas->Pen->Color = clDeep;
FCanvas->Pen->Style = psSolid;
FCanvas->Rectangle(1,1,Width-1,Height-1);
FCanvas->Pen->Color = clBorder;
FCanvas->RoundRect(0,0,Width,Height,6,6);
// display caption
FCanvas->Font = Font;
if(Enabled)// || (diStruct.itemState && ODS_DISABLED) == 0)
{
}
else
{
FCanvas->Font->Color = (TColor)0x00808080; // 颜色变灰
}
int x,y;
y = (Height - FCanvas->TextHeight(Caption))/2 - 1;
switch(FAlignment)
{
case taCenter: x = (Width - FCanvas->TextWidth(Caption))/2; break;
case taLeftJustify: x = 2; break;
case taRightJustify: x = Width - FCanvas->TextWidth(Caption) - 2; break;
}
if(bIsDown)
{
x++;y++;
}
FCanvas->TextOut(x,y,Caption);
if(FIsFocused && FShowFocus)// && bIsDefault)
{
TRect R = ClientRect;
InflateRect(&R,-4,-4);
FCanvas->Pen->Color = clWindowFrame;
FCanvas->Brush->Color = clBtnFace;
DrawFocusRect(FCanvas->Handle,&R);
}
}
__finally
{
FCanvas->Handle = 0;
}
}