123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #include "stdafx.h"
- #include "SkinMenu.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
- IMPLEMENT_DYNCREATE(CSkinMenu, CMenu)
- CSkinMenu::CSkinMenu()
- {
-
- }
- CSkinMenu::~CSkinMenu()
- {
- Detach();
- ASSERT(m_hMenu == NULL);
- }
- void CSkinMenu::DrawItem( LPDRAWITEMSTRUCT lpDIS)
- {
- CDC *pDC=CDC::FromHandle(lpDIS->hDC) ;
- CRect rect(lpDIS->rcItem);
- CString strText((LPCSTR)lpDIS->itemData);
-
- CBrush brush(m_crFlatBK);
- pDC->FillRect(&rect, &brush);
- CRect rcGray=rect;
- rcGray.right =rcGray.left +28;
- pDC->FillSolidRect(&rcGray, m_crFlatGray);
-
- pDC->SetBkMode(TRANSPARENT);
- CBrush br(m_crBtnShadow);
-
- if ((lpDIS->itemState & ODS_SELECTED) &&
- (lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
- {
- CBrush brush(m_crFlatHighLight);
- rect.DeflateRect(1,1) ;
- pDC->FrameRect(&rect, &br);
- rect.DeflateRect(1,1) ;
- pDC->FillRect(&rect, &brush);
- }
- BOOL bChecked =lpDIS->itemState & ODS_CHECKED;
- BOOL bSelected=lpDIS->itemState & ODS_SELECTED;
- if (bChecked)
- {
- COLORREF cr;
- if (bSelected)
- cr=AlphaColor(m_crFlatHighLight,AlphaColor(m_crFlatHighLight,m_crFlatBK,140),140);
- else
- cr=AlphaColor(m_crFlatHighLight,m_crFlatBK,140);
- rcGray.DeflateRect(3,3);
- pDC->SetBkMode(TRANSPARENT);
- pDC->SetTextColor(RGB(0,0,0));
- pDC->FrameRect(&rcGray, &br);
- rcGray.DeflateRect(1,1);
- pDC->FillSolidRect(&rcGray, cr);
- pDC->DrawText("√",&rcGray,DT_EXPANDTABS|DT_VCENTER|DT_CENTER|DT_SINGLELINE);
- }
-
-
- if(bSelected)
- pDC->SetTextColor(m_crFlatHighLightText);
- else
- pDC->SetTextColor(RGB(0,0,0));
- CRect rcText=rect;
- rcText.left =28+3;
- CFont *ofont;
- ofont = pDC->SelectObject(AfxGetMainWnd()->GetFont() );
- pDC->DrawText(strText,rcText,DT_LEFT|DT_SINGLELINE|DT_VCENTER);
- pDC->SelectObject(ofont);
- }
- void CSkinMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
- {
- CDC *pDC =AfxGetMainWnd()->GetDC();
- CString strText((LPCSTR)lpMIS->itemData);
- CSize size;
- size=pDC->GetTextExtent(strText);
- lpMIS->itemWidth = size.cx +24+4;
- lpMIS->itemHeight =24+4;
- AfxGetMainWnd()->ReleaseDC(pDC);
- }
- COLORREF CSkinMenu::AlphaColor(COLORREF crUp,COLORREF crDown,int nAlpha)
- {
-
- return RGB((GetRValue(crUp)*(255-nAlpha)+GetRValue(crDown)*nAlpha)/255, \
- (GetGValue(crUp)*(255-nAlpha)+GetGValue(crDown)*nAlpha)/255,\
- (GetBValue(crUp)*(255-nAlpha)+GetBValue(crDown)*nAlpha)/255);
- }
|