www.pudn.com > clking_src.rar > GuiNormalButton.cpp
//-----------------------------------------------------------------------// // This is a part of the GuiLib MFC Extention. // // Autor : Francisco Campos // // (C) 2002 Francisco CamposAll rights reserved // // This code is provided "as is", with absolutely no warranty expressed // // or implied. Any use is at your own risk. // // You must obtain the author's consent before you can include this code // // in a software library. // // If the source code in this file is used in any application // // then acknowledgement must be made to the author of this program // // fcampos@tutopia.com // //-----------------------------------------------------------------------// #include "stdafx.h" #include "guinormalbutton.h" #include "GuiDrawLayer.h" CGuiNormalButton::CGuiNormalButton(void) { m_stlbtn=STL_NORMAL; m_clColor=GuiDrawLayer::GetRGBColorFace(); } CGuiNormalButton::~CGuiNormalButton(void) { } void CGuiNormalButton::SetStyleButton(StyleBtn StlButton) { m_stlbtn=StlButton; } //STL_NORMAL=0,STL_FLAT=1,STL_SEMIFLAT=2,STL_XP=3 void CGuiNormalButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC* pdc= CDC::FromHandle(lpDrawItemStruct->hDC); CRect rc=lpDrawItemStruct->rcItem; UINT uState=lpDrawItemStruct->itemState; CBrush cb; cb.CreateSolidBrush(m_clColor); COLORREF clrTL =GuiDrawLayer::GetRGBColorBTNHigh(); COLORREF clrBR =GuiDrawLayer::GetRGBColorShadow(); pdc->FillRect(rc,&cb); if( uState & ODS_SELECTED) //the button is pressed { switch(m_stlbtn) { case STL_FLAT: case STL_NORMAL: case STL_SEMIFLAT: pdc->Draw3dRect(rc,clrBR,clrTL); rc.DeflateRect(1,1); break; } } else if(m_bMouserOver) { switch(m_stlbtn) { case STL_FLAT: case STL_NORMAL: case STL_SEMIFLAT: pdc->Draw3dRect(rc,clrTL,clrBR); rc.DeflateRect(1,1); break; } }else { switch(m_stlbtn) { case STL_NORMAL: pdc->Draw3dRect(rc,clrTL,clrBR); rc.DeflateRect(1,1); break; case STL_SEMIFLAT: pdc->Draw3dRect(rc,clrTL,clrBR); rc.DeflateRect(1,1); break; case STL_FLAT: break; } } int calculodify; calculodify=rc.Height()-(m_SizeImage.cy); calculodify/=2; int nHeigh=calculodify+(m_bShowDark?1:0); int nWidth=rc.Width()/2 ; CPoint m_point=CPoint(nWidth,nHeigh); if (m_SizeImage.cx > 2) { if(m_bMouserOver == 1 && !(uState & ODS_DISABLED) && !(uState & ODS_SELECTED) && m_bShowDark) { CPoint p(m_point.x+1,m_point.y+1); pdc->DrawState(p,m_SizeImage,m_Icon,DSS_MONO,CBrush (GuiDrawLayer::GetRGBColorShadow())); m_point.x-=1; m_point.y-=1; } pdc->DrawState (m_point, m_SizeImage,m_Icon, (uState==ODS_DISABLED?DSS_DISABLED:DSS_NORMAL),(CBrush*)NULL); } if (m_SizeText.cx > 2) { int nMode = pdc->SetBkMode(TRANSPARENT); CRect rectletra=rc; rectletra.left+=m_SizeImage.cx; CPoint pt=CSize(rectletra.top,rectletra.left); if (uState & ODS_DISABLED) pdc->DrawState(pt, m_SizeText, m_szText, DSS_DISABLED, TRUE, 0, (CBrush*)NULL); else pdc->DrawText(m_szText,rectletra,DT_SINGLELINE|DT_LEFT|DT_VCENTER); pdc->SetBkMode(nMode); } }