www.pudn.com > PaletteDemo.rar > ToolsPalette.cpp


// ToolsPalette.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "PaletteDemo.h" 
#include "ToolsPalette.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
const int nInfoHeight = 50;	// Information area height 
const int nHorzMargin = 5; 
const int nVertMargin = 5; 
 
///////////////////////////////////////////////////////////////////////////// 
// CToolsPalette 
 
CToolsPalette::CToolsPalette() 
{ 
	m_nColumns = 2; 
} 
 
CToolsPalette::~CToolsPalette() 
{ 
} 
 
 
BEGIN_MESSAGE_MAP(CToolsPalette, CBCGToolBar) 
	//{{AFX_MSG_MAP(CToolsPalette) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CToolsPalette message handlers 
 
CSize CToolsPalette::CalcSize (BOOL bVertDock) 
{ 
	// Calculate palette bar size. First, calculate bar width 
	// according to the number of columns: 
	int cx = GetColumnWidth () * m_nColumns; 
 
	// Now, wrap bar by width and calculate its height: 
	int cy = WrapToolBar (cx) * GetRowHeight (); 
 
	// Add vertical and horizontal margins: 
	return CSize (cx + nHorzMargin * 2, cy + nInfoHeight + nVertMargin * 2); 
} 
//********************************************************************************** 
void CToolsPalette::AdjustLocations () 
{ 
	CRect rectClient; 
	GetClientRect (rectClient); 
 
	int x = rectClient.left + nHorzMargin; 
	int y = rectClient.top + nVertMargin; 
 
	// Set buttons locations: 
	for (POSITION pos = m_Buttons.GetHeadPosition (); pos != NULL;) 
	{ 
		CBCGToolbarButton* pButton = (CBCGToolbarButton*) m_Buttons.GetNext (pos); 
		ASSERT_VALID (pButton); 
 
		pButton->SetRect (CRect (CPoint (x, y), CSize (GetColumnWidth (), GetRowHeight ()))); 
 
		if (pButton->m_bWrap && pos != NULL) 
		{ 
			// Start next row: 
			y += GetRowHeight (); 
			x = rectClient.left + nHorzMargin; 
		} 
		else 
		{ 
			// Move to the next column: 
			x += GetColumnWidth (); 
		} 
	} 
 
	// Set info. area rectangle (at the bottom of bar): 
	if (y + GetRowHeight () < rectClient.bottom) 
	{ 
		m_rectInfo = rectClient; 
		m_rectInfo.top = y + GetRowHeight (); 
		m_rectInfo.DeflateRect (nHorzMargin, nVertMargin); 
	} 
	else 
	{ 
		m_rectInfo.SetRectEmpty (); 
	} 
} 
//********************************************************************************** 
void CToolsPalette::SetColumns (int nColumns) 
{ 
	m_nColumns = nColumns; 
 
	if (GetSafeHwnd () != NULL && GetParentFrame () != NULL) 
	{ 
		GetParentFrame ()->RecalcLayout (); 
	} 
} 
//********************************************************************************** 
void CToolsPalette::DoPaint(CDC* pDC) 
{ 
	CBCGToolBar::DoPaint (pDC); 
 
	//----------------------- 
	// Draw information area: 
	//----------------------- 
	if (m_rectInfo.Height () > 10) 
	{ 
		pDC->Draw3dRect (m_rectInfo,::GetSysColor (COLOR_3DSHADOW),  
									::GetSysColor (COLOR_3DHILIGHT)); 
 
		CFont* pOldFont = (CFont*) pDC->SelectStockObject (DEFAULT_GUI_FONT); 
		pDC->SetBkMode (TRANSPARENT); 
 
		pDC->DrawText (CString (_T("Info")), m_rectInfo, DT_VCENTER | DT_CENTER | DT_SINGLELINE); 
 
		pDC->SelectObject (pOldFont); 
	} 
}