www.gusucode.com > VC++开源的SHP格式GIS地图查看软件源程序源码程序 > VC++开源的SHP格式GIS地图查看软件源程序源码程序\code\JMCoolMenu.cpp
//Download by http://www.NewXing.com #include "stdafx.h" #include "JMCoolMenu.h" #define RGB_BUTTON_BLACK (GetSysColor(COLOR_WINDOWFRAME)) #define RGB_BUTTON_WHITE (GetSysColor(COLOR_BTNHIGHLIGHT)) #define RGB_BUTTON_LIGHT (GetSysColor(COLOR_BTNFACE)) #define RGB_BUTTON_DARK (GetSysColor(COLOR_BTNSHADOW)) #define RGB_MENU_FACE (GetSysColor(COLOR_MENU)) #define RGB_MENUTEXT_BACK (GetSysColor(COLOR_HIGHLIGHT)) #define RGB_MENU_TEXT (GetSysColor(COLOR_MENUTEXT)) CJMCoolMenu::CJMCoolMenu() { m_clrHilight = ::GetSysColor(COLOR_HIGHLIGHT); m_clrNormalText = ::GetSysColor(COLOR_WINDOWTEXT); m_clrHilightText = ::GetSysColor(COLOR_HIGHLIGHTTEXT); m_clrBkgnd = ::GetSysColor(COLOR_MENU); m_pImageList = NULL; //CreatePopupMenu(); } CJMCoolMenu::~CJMCoolMenu() { int i; STRMENUINFO* pInfo; if ( m_pImageList != NULL ) delete m_pImageList; DestroyMenu(); for ( i = m_MenuInfo.GetSize()-1 ; i>=0 ; i-- ) { pInfo = (STRMENUINFO*)m_MenuInfo.GetAt(i); delete pInfo; } m_MenuInfo.RemoveAll(); } void CJMCoolMenu::SetImageList(CImageList *pImageList) { m_pImageList = pImageList; } void CJMCoolMenu::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC *pDC = ::CDC::FromHandle(lpDrawItemStruct->hDC ); CRect RC = lpDrawItemStruct->rcItem; UINT iState = lpDrawItemStruct->itemState; int iItemID = lpDrawItemStruct->itemID; CRect rcImage,rcText; CString strText; CPoint pt; STRMENUINFO* pInfo; rcImage = RC; rcImage.right = RC.left + 16; rcText = RC; rcText.left = rcImage.right + 10; pDC->SetBkMode( TRANSPARENT ); if ( iState & ODS_SELECTED ) { if ( RC.left != 0 ) { pDC->FillSolidRect(&RC , m_clrBkgnd ); pDC->SetTextColor(m_clrNormalText); } else { pDC->FillSolidRect(&RC , m_clrHilight ); pDC->SetTextColor(m_clrHilightText); } } else { pDC->FillSolidRect(&RC, m_clrBkgnd ); pDC->SetTextColor( m_clrNormalText ); } if( iItemID >= 0 ) { for ( int i = 0 ; i < m_MenuInfo.GetSize(); i++ ) { pInfo = m_MenuInfo.GetAt(i); if ( pInfo->MenuID == (long)iItemID ) { if ( m_pImageList != NULL ) { if (pInfo->ImageIndex >= 0 && pInfo->ImageIndex < m_pImageList->GetImageCount()) { pt = RC.TopLeft(); pt.Offset(5,5); m_pImageList->Draw(pDC,pInfo->ImageIndex,pt,ILD_TRANSPARENT); } } strText = pInfo->csTitle; pDC->DrawText(strText, rcText, DT_LEFT | DT_VCENTER | DT_SINGLELINE); break; } } } } void CJMCoolMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct) { lpMeasureItemStruct->itemHeight = 20; lpMeasureItemStruct->itemWidth = 100; } void CJMCoolMenu::AddMenuInfo(STRMENUINFO* pInfo) { if ( pInfo == NULL ) return; m_MenuInfo.Add(pInfo ); }