123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- // ToolBarXP.cpp : implementation file
- //
- #include "stdafx.h"
- #include "ToolBarXP.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CToolBarXP
- CToolBarXP::CToolBarXP()
- {
- m_clrBack = RGB(239, 237, 222);
- m_clrHot = RGB(193, 210, 238);
- m_clrChecked = m_clrHot;
- m_clrSelected = m_clrChecked;
- m_clrLine = RGB(49, 106, 197);
- m_bDrawLine = TRUE;
- }
- CToolBarXP::~CToolBarXP()
- {
- }
- BEGIN_MESSAGE_MAP(CToolBarXP, CToolBarCtrl)
- //{{AFX_MSG_MAP(CToolBarXP)
- //}}AFX_MSG_MAP
- ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CToolBarXP message handlers
- BOOL CToolBarXP::LoadToolBar(UINT nID)
- {
- if(!m_hWnd)return FALSE;
- HRSRC hRsrc = ::FindResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(nID), RT_TOOLBAR);
- if (hRsrc == NULL)
- return FALSE;
- HGLOBAL hGlobal = LoadResource(AfxGetInstanceHandle(), hRsrc);
- if (hGlobal == NULL)
- return FALSE;
- TOOLBAR_DATA* pData = (TOOLBAR_DATA*)LockResource(hGlobal);
- if (pData == NULL)
- return FALSE;
- BOOL bResult;
- TBBUTTON tbb;
- memset(&tbb,0,sizeof(TBBUTTON));
- tbb.iString = -1;
- int iImage = 0;
- for (int i = 0; i < pData->wItemCount; i++)
- {
- tbb.fsState = TBSTATE_ENABLED;
- tbb.idCommand = pData->items()[i];
- if(tbb.idCommand == 0)
- {
- tbb.fsStyle = TBSTYLE_SEP;
- tbb.iBitmap = -1;
- }
- else
- {
- tbb.fsStyle = TBSTYLE_BUTTON;
- tbb.iBitmap = iImage++;
- }
- bResult = AddButtons(1,&tbb);
- if(!bResult)return FALSE;
- }
- if(bResult)
- {
- TBADDBITMAP tbab;
- tbab.hInst = AfxGetInstanceHandle();
- tbab.nID = nID;
- SendMessage(TB_ADDBITMAP,(WPARAM)pData->wItemCount,(LPARAM)&tbab);
- }
- UnlockResource(hGlobal);
- FreeResource(hGlobal);
- return bResult;
- }
- //////////////////////////////////////////////////////////////////////////
- // Process CustomDraw notification, the drawing code is all from here
- void CToolBarXP::OnCustomDraw( NMHDR * pNotifyStruct, LRESULT* pResult )
- {
- NMTBCUSTOMDRAW *pnmcd = (NMTBCUSTOMDRAW *)pNotifyStruct;
- CDC dc;
- dc.Attach(pnmcd->nmcd.hdc);
- switch (pnmcd->nmcd.dwDrawStage)
- {
- case CDDS_PREPAINT:
- *pResult = CDRF_NOTIFYITEMDRAW;
- break;
- case CDDS_ITEMPREPAINT:
- PreDrawItem(&dc, pnmcd->nmcd.rc, pnmcd->nmcd.uItemState);
- *pResult = TBCDRF_NOEDGES;
- break;
- case CDDS_ITEMPOSTPAINT:
- break;
- }
- dc.Detach();
- }
- void CToolBarXP::PreDrawItem(CDC *pDC, const RECT &rect, UINT uState)
- {
- CRect rcDraw = rect;
- if (uState & CDIS_HOT)
- {
- CPen pen(PS_SOLID, 1, m_clrLine);
- CPen *pOldPen = pDC->SelectObject(&pen);
- CBrush brush(m_clrHot);
- CBrush *pOldBr = pDC->SelectObject(&brush);
- pDC->Rectangle(&rect);
- pDC->SelectObject(pOldBr);
- pDC->SelectObject(pOldPen);
- }
- else if (uState & CDIS_CHECKED)
- {
- CPen pen(PS_SOLID, 1, m_clrLine);
- CPen *pOldPen = pDC->SelectObject(&pen);
- CBrush brush(m_clrChecked);
- CBrush *pOldBr = pDC->SelectObject(&brush);
- pDC->Rectangle(&rect);
- pDC->SelectObject(pOldBr);
- pDC->SelectObject(pOldPen);
- }
- else if (uState & CDIS_SELECTED)
- {
- CPen pen(PS_SOLID, 1, m_clrLine);
- CPen *pOldPen = pDC->SelectObject(&pen);
- CBrush brush(m_clrSelected);
- CBrush *pOldBr = pDC->SelectObject(&brush);
- pDC->Rectangle(&rect);
- pDC->SelectObject(pOldBr);
- pDC->SelectObject(pOldPen);
- }
- }
|