www.pudn.com > clking_src.rar > GuiRadioButton.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 "GuiRadioButton.h" #include "GuiDrawLayer.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CGuiRadioButton IMPLEMENT_DYNAMIC(CGuiRadioButton,CButton); CGuiRadioButton::CGuiRadioButton() { m_SelectBtn=FALSE; m_bOldCheck=FALSE; m_bPressBtn=FALSE; m_rc=CRect(0,0,0,0); } CGuiRadioButton::~CGuiRadioButton() { } BEGIN_MESSAGE_MAP(CGuiRadioButton, CButton) //{{AFX_MSG_MAP(CGuiRadioButton) ON_WM_ERASEBKGND() ON_WM_TIMER() ON_WM_MOUSEMOVE() //ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_CREATE() //ON_WM_KILLFOCUS() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CGuiRadioButton message handlers void CGuiRadioButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Add your code to draw the specified item CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC); CRect m_rcClient=lpDrawItemStruct->rcItem; UINT m_State=lpDrawItemStruct->itemState; CBrush cb; CRect m_rcTemp=m_rcClient; CPoint pt; CSize m_Csize; CString m_szCaption; COLORREF m_clrCheck=RGB(0,170,170); COLORREF m_Over=RGB(255,193,111); CPen cpOver(PS_SOLID,1,RGB(255,193,111)); cb.CreateSolidBrush(GuiDrawLayer::GetRGBColorXP()); pDC->FillRect(m_rcTemp,&cb); int iMode=pDC->SetBkMode(TRANSPARENT); int iExtile=GetButtonStyle(); //obtenemos orientación del texto CRect m_rcText=m_rcClient; GetWindowText(m_szCaption); //------------------------------------------------------- //Ajust text //------------------------------------------------------- if(m_szCaption.GetLength() > 1) m_Csize= pDC->GetTextExtent(m_szCaption); if (m_rcClient.Height() > 13) { int Dif=m_rcClient.Height()-13; Dif/=2; m_rcTemp.top=Dif; m_rcTemp.bottom=m_rcTemp.top+13; } if (iExtile & BS_LEFTTEXT) { m_rcTemp.left= m_rcTemp.right-13; pt=CPoint(m_rcTemp.left,m_rcTemp.top+1); } else { m_rcTemp.right= m_rcTemp.left+13; pt=CPoint(m_rcTemp.right+2,m_rcTemp.top+1); m_rcText.left=m_rcTemp.right+1; } m_rc=m_rcTemp; //------------------------------------------------------------------- //Draw Ellipse //------------------------------------------------------------------- DrawEllipse(pDC,m_rcTemp); int x=lpDrawItemStruct->itemState; if (lpDrawItemStruct->itemState & ODS_DISABLED) pDC->DrawState(pt, m_Csize, m_szCaption, DSS_DISABLED, TRUE, 0, (HBRUSH)NULL); else pDC->DrawText(m_szCaption,m_rcText,DT_SINGLELINE|DT_LEFT|DT_VCENTER); if (m_bPressBtn && !m_SelectBtn) { CheckRadio(pDC,m_rc) ; } else if(m_SelectBtn && !m_bPressBtn) { DrawOrange(pDC,m_rc); } else if(m_SelectBtn && m_bPressBtn) { DrawOrange(pDC,m_rc); CheckRadio(pDC,m_rc) ; } } void CGuiRadioButton::SetCheck(int nCheck) { m_bPressBtn=nCheck; } void CGuiRadioButton::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default CRect m_rect; GetClientRect(&m_rect); CPoint pt(GetMessagePos()); ScreenToClient(&pt); if (!m_rect.PtInRect(pt)) { m_SelectBtn=FALSE; Invalidate(); KillTimer(1); } CButton::OnTimer(nIDEvent); } void CGuiRadioButton::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if (m_SelectBtn==TRUE) return; CRect m_rect; GetClientRect(&m_rect); if (m_rect.PtInRect(point)) { m_SelectBtn =TRUE; Invalidate(); UpdateWindow(); SetTimer(1,100,NULL); } CButton::OnMouseMove(nFlags, point); } void CGuiRadioButton::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_SelectBtn=TRUE; SetTimer(1,100,NULL); Invalidate(); UpdateWindow(); CButton::OnLButtonDown(nFlags, point); } void CGuiRadioButton::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CButton::OnLButtonUp(nFlags, point); CRect m_rect; GetClientRect(&m_rect); if (m_rect.PtInRect(point)) { m_bPressBtn=TRUE; m_SelectBtn=FALSE; UnCheckRadio(); Invalidate(); KillTimer(1); } } //******************************************************************* int CGuiRadioButton::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CButton::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here return 0; } //******************************************************************* void CGuiRadioButton::OnKillFocus(CWnd* pNewWnd) { CButton::OnKillFocus(pNewWnd); // TODO: Add your message handler code here } //******************************************************************* void CGuiRadioButton::DrawEllipse(CDC* pDC,CRect m_rc) { //*************************************** //pDC->SetPixel(CPoint(3,0),RGB(222,228,229)); pDC->SetPixel(CPoint(4,0),RGB(164,184,198)); pDC->SetPixel(CPoint(5,0),RGB(90,128,160)); pDC->SetPixel(CPoint(6,0),RGB(133,158,175)); pDC->SetPixel(CPoint(7,0),RGB(90,128,160)); pDC->SetPixel(CPoint(8,0),RGB(164,184,198)); //pDC->SetPixel(CPoint(9,0),RGB(223,228,229)); pDC->SetPixel(CPoint(2,1),RGB(180,196,207)); pDC->SetPixel(CPoint(3,1),RGB(133,158,175)); pDC->SetPixel(CPoint(4,1),RGB(102,135,163)); pDC->SetPixel(CPoint(5,1),RGB(171,186,197)); pDC->SetPixel(CPoint(7,1),RGB(171,186,197)); pDC->SetPixel(CPoint(8,1),RGB(102,135,163)); pDC->SetPixel(CPoint(9,1),RGB(133,158,175)); pDC->SetPixel(CPoint(10,1),RGB(180,196,207)); pDC->SetPixel(CPoint(1,2),RGB(181,196,207)); pDC->SetPixel(CPoint(2,2),RGB(87,124,156)); pDC->SetPixel(CPoint(3,2),RGB(169,185,195)); pDC->SetPixel(CPoint(9,2),RGB(169,185,195)); pDC->SetPixel(CPoint(10,2),RGB(87,124,156)); pDC->SetPixel(CPoint(11,2),RGB(181,196,207)); //pDC->SetPixel(CPoint(0,3),RGB(223,228,229)); pDC->SetPixel(CPoint(1,3),RGB(133,158,175)); pDC->SetPixel(CPoint(2,3),RGB(169,185,195)); pDC->SetPixel(CPoint(10,3),RGB(169,185,195)); pDC->SetPixel(CPoint(11,3),RGB(133,158,175)); //pDC->SetPixel(CPoint(12,3),RGB(223,228,229)); pDC->SetPixel(CPoint(0,4),RGB(164,183,198)); pDC->SetPixel(CPoint(1,4),RGB(102,135,163)); pDC->SetPixel(CPoint(11,4),RGB(102,135,163)); pDC->SetPixel(CPoint(12,4),RGB(164,183,198)); pDC->SetPixel(CPoint(0,5),RGB(102,135,163)); pDC->SetPixel(CPoint(1,5),RGB(164,183,198)); pDC->SetPixel(CPoint(11,5),RGB(164,183,198)); pDC->SetPixel(CPoint(12,5),RGB(102,135,163)); pDC->SetPixel(CPoint(0,6),RGB(133,158,175)); pDC->SetPixel(CPoint(12,6),RGB(133,158,175)); pDC->SetPixel(CPoint(0,7),RGB(102,135,163)); pDC->SetPixel(CPoint(1,7),RGB(164,183,198)); pDC->SetPixel(CPoint(11,7),RGB(164,183,198)); pDC->SetPixel(CPoint(12,7),RGB(102,135,163)); pDC->SetPixel(CPoint(0,8),RGB(164,183,198)); pDC->SetPixel(CPoint(1,8),RGB(102,135,163)); pDC->SetPixel(CPoint(11,8),RGB(102,135,163)); pDC->SetPixel(CPoint(12,8),RGB(164,183,198)); //pDC->SetPixel(CPoint(0,9),RGB(223,228,229)); pDC->SetPixel(CPoint(1,9),RGB(133,158,175)); pDC->SetPixel(CPoint(2,9),RGB(169,185,195)); pDC->SetPixel(CPoint(10,9),RGB(169,185,195)); pDC->SetPixel(CPoint(11,9),RGB(133,158,175)); //pDC->SetPixel(CPoint(12,9),RGB(223,228,229)); pDC->SetPixel(CPoint(1,10),RGB(181,196,207)); pDC->SetPixel(CPoint(2,10),RGB(87,124,156)); pDC->SetPixel(CPoint(3,10),RGB(169,185,195)); pDC->SetPixel(CPoint(9,10),RGB(169,185,195)); pDC->SetPixel(CPoint(10,10),RGB(87,124,156)); pDC->SetPixel(CPoint(11,10),RGB(181,196,207)); pDC->SetPixel(CPoint(2,11),RGB(180,196,207)); pDC->SetPixel(CPoint(3,11),RGB(133,158,175)); pDC->SetPixel(CPoint(4,11),RGB(102,135,163)); pDC->SetPixel(CPoint(5,11),RGB(171,186,197)); pDC->SetPixel(CPoint(7,11),RGB(171,186,197)); pDC->SetPixel(CPoint(8,11),RGB(102,135,163)); pDC->SetPixel(CPoint(9,11),RGB(133,158,175)); pDC->SetPixel(CPoint(10,11),RGB(180,196,207)); //pDC->SetPixel(CPoint(3,12),RGB(222,228,229)); pDC->SetPixel(CPoint(4,12),RGB(164,184,198)); pDC->SetPixel(CPoint(5,12),RGB(90,128,160)); pDC->SetPixel(CPoint(6,12),RGB(133,158,175)); pDC->SetPixel(CPoint(7,12),RGB(90,128,160)); pDC->SetPixel(CPoint(8,12),RGB(164,184,198)); //pDC->SetPixel(CPoint(9,12),RGB(223,228,229)); } //******************************************************************* void CGuiRadioButton::CheckRadio(CDC* pDC,CRect m_rc) { CRect m_rcTemp=m_rc; m_rcTemp.DeflateRect(6,6); pDC->SetPixel(m_rc.left+6,3,RGB(242,237,215)); pDC->SetPixel(m_rc.left+5,4,RGB(160,209,148)); pDC->SetPixel(m_rc.left+6,4,RGB(77,191,72)); pDC->SetPixel(m_rc.left+7,4,RGB(160,209,148)); pDC->SetPixel(m_rc.left+4,5,RGB(172,222,160)); pDC->SetPixel(m_rc.left+5,5,RGB(85,213,81)); pDC->SetPixel(m_rc.left+6,5,RGB(67,195,63)); pDC->SetPixel(m_rc.left+7,5,RGB(41,168,38)); pDC->SetPixel(m_rc.left+8,5,RGB(172,222,160)); pDC->SetPixel(m_rc.left+4,6,RGB(77,191,72)); pDC->SetPixel(m_rc.left+5,6,RGB(66,195,63)); pDC->SetPixel(m_rc.left+6,6,RGB(56,185,53)); pDC->SetPixel(m_rc.left+7,6,RGB(33,161,33)); pDC->SetPixel(m_rc.left+8,6,RGB(37,149,32)); pDC->SetPixel(m_rc.left+4,7,RGB(172,222,160)); pDC->SetPixel(m_rc.left+5,7,RGB(67,195,63)); pDC->SetPixel(m_rc.left+6,7,RGB(34,162,32)); pDC->SetPixel(m_rc.left+7,7,RGB(34,162,32)); pDC->SetPixel(m_rc.left+8,7,RGB(172,222,160)); pDC->SetPixel(m_rc.left+5,8,RGB(160,209,148)); pDC->SetPixel(m_rc.left+6,8,RGB(35,149,33)); pDC->SetPixel(m_rc.left+7,8,RGB(160,209,148)); } void CGuiRadioButton::DrawOrange(CDC* pDC,CRect m_rc) { pDC->SetPixel(CPoint(6,1),RGB(244,212,140)); pDC->SetPixel(CPoint(3,2),RGB(181,196,207)); pDC->SetPixel(CPoint(4,2),RGB(181,196,207)); pDC->SetPixel(CPoint(5,2),RGB(253,214,132)); pDC->SetPixel(CPoint(6,2),RGB(253,214,132)); pDC->SetPixel(CPoint(7,2),RGB(253,214,132)); pDC->SetPixel(CPoint(8,2),RGB(253,214,132)); //pDC->SetPixel(CPoint(9,2),RGB(253,214,132)); pDC->SetPixel(CPoint(3,3),RGB(252,220,152)); pDC->SetPixel(CPoint(4,3),RGB(252,220,152)); pDC->SetPixel(CPoint(5,3),RGB(247,227,179)); pDC->SetPixel(CPoint(6,3),RGB(242,237,215)); pDC->SetPixel(CPoint(7,3),RGB(247,227,179)); pDC->SetPixel(CPoint(8,3),RGB(251,200,99)); pDC->SetPixel(CPoint(9,3),RGB(251,200,99)); pDC->SetPixel(CPoint(2,4),RGB(254,223,156)); pDC->SetPixel(CPoint(3,4),RGB(254,220,152)); pDC->SetPixel(CPoint(4,4),RGB(233,236,210)); pDC->SetPixel(CPoint(8,4),RGB(233,236,210)); pDC->SetPixel(CPoint(9,4),RGB(251,200,99)); pDC->SetPixel(CPoint(10,4),RGB(251,200,99)); pDC->SetPixel(CPoint(2,5),RGB(253,217,140)); pDC->SetPixel(CPoint(3,5),RGB(247,227,179)); pDC->SetPixel(CPoint(9,5),RGB(247,227,179)); pDC->SetPixel(CPoint(10,5),RGB(251,200,99)); pDC->SetPixel(CPoint(1,6),RGB(254,223,156)); pDC->SetPixel(CPoint(2,6),RGB(254,220,152)); pDC->SetPixel(CPoint(3,6),RGB(233,236,210)); pDC->SetPixel(CPoint(9,6),RGB(233,236,210)); pDC->SetPixel(CPoint(10,6),RGB(251,200,99)); pDC->SetPixel(CPoint(11,6),RGB(251,200,99)); pDC->SetPixel(CPoint(2,7),RGB(252,211,124)); pDC->SetPixel(CPoint(3,7),RGB(246,224,172)); pDC->SetPixel(CPoint(9,7),RGB(251,200,99)); pDC->SetPixel(CPoint(10,7),RGB(251,200,99)); pDC->SetPixel(CPoint(2,8),RGB(254,223,156)); pDC->SetPixel(CPoint(3,8),RGB(254,220,152)); pDC->SetPixel(CPoint(4,8),RGB(233,236,210)); pDC->SetPixel(CPoint(8,8),RGB(233,236,210)); pDC->SetPixel(CPoint(9,8),RGB(251,200,99)); pDC->SetPixel(CPoint(10,8),RGB(251,200,99)); pDC->SetPixel(CPoint(3,9),RGB(253,217,140)); pDC->SetPixel(CPoint(4,9),RGB(253,217,140)); pDC->SetPixel(CPoint(5,9),RGB(247,227,179)); pDC->SetPixel(CPoint(7,9),RGB(247,227,179)); pDC->SetPixel(CPoint(8,9),RGB(251,200,99)); pDC->SetPixel(CPoint(9,9),RGB(251,200,99)); pDC->SetPixel(CPoint(4,10),RGB(251,200,99)); pDC->SetPixel(CPoint(5,10),RGB(251,200,99)); pDC->SetPixel(CPoint(6,10),RGB(251,200,99)); pDC->SetPixel(CPoint(7,10),RGB(251,200,99)); pDC->SetPixel(CPoint(8,10),RGB(251,200,99)); pDC->SetPixel(CPoint(6,11),RGB(251,200,99)); } //******************************************************************* void CGuiRadioButton::UnCheckRadio() { CWnd *pParent = GetParent(); ASSERT(pParent); CWnd *pWnd = pParent->GetNextDlgGroupItem((CWnd *)this); while (pWnd && (pWnd != this)) { if ((((CButton*)pWnd)->GetButtonStyle() & BS_AUTORADIOBUTTON) && pWnd->IsKindOf( RUNTIME_CLASS( CGuiRadioButton ) )) { ((CGuiRadioButton *)pWnd)->SetCheck(0); pWnd->Invalidate(); } pWnd = pParent->GetNextDlgGroupItem(pWnd); } } //******************************************************************* BOOL CGuiRadioButton::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class return CButton::PreTranslateMessage(pMsg); } //******************************************************************* void CGuiRadioButton::PreSubclassWindow() { // TODO: Add your specialized code here and/or call the base class CButton::PreSubclassWindow(); ModifyStyle(0,BS_OWNERDRAW); } BOOL CGuiRadioButton::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default return FALSE; }