www.pudn.com > Spin_Slide_ToolBar.zip > SpinnerToolBar.cpp


// SpinToolBar.cpp : implementation file 
// 
 
 
/*################################################################## 
 
  Author:	Masoud Samimi 
  Website:	www.geocities.com/samimi73 
  Email:	marcello43@hotmail.com 
 
  Program:	Spinner Toolbars 
  History:	22.07.2000 (dd.mm.yy) 
   
  Purpose: Please visit my website, it is expalined there. 
   
 
Important Notice: 
 
	This Idea and the Application is Copyright(c) Masoud Samimi 1999,2000. 
	You can freely use it as long as you credit me for it. 
 
	No guarantee/warantee, expressed or implied is given on this app and I will not be responsible  
	for any damage to you, your property or any other person from using it. 
	USE IT ON YOUR OWN RISK. 
 
	Thankyou and have FUNNE =-) 
 
	Masoud Samimi. 
 
##################################################################*/ 
 
#include "stdafx.h" 
#include "SpinnerTB.h" 
#include "SpinnerToolBar.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CSpinToolBar 
 
CSpinToolBar::CSpinToolBar() 
{ 
 
	m_nRed		= 255; 
	m_nGreen	= 255; 
	m_nBlue		= 0; 
 
	m_nGradValue = 255; 
		 
} 
 
CSpinToolBar::~CSpinToolBar() 
{ 
} 
 
 
BEGIN_MESSAGE_MAP(CSpinToolBar, CToolBar) 
	//{{AFX_MSG_MAP(CSpinToolBar) 
	ON_WM_CREATE() 
	ON_WM_HSCROLL() 
	ON_WM_VSCROLL() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CSpinToolBar message handlers 
 
int CSpinToolBar::OnCreate(LPCREATESTRUCT lpCreateStruct)  
{ 
 
	if (CToolBar::OnCreate(lpCreateStruct) == -1) 
		return -1; 
 
 
	//##################################################// 
    // Load the dummy buttons toolbar. 
	// 
    if (!LoadToolBar (IDR_SPINNER_BAR)) 
        return -1; 
 
 
 
	//##################################################// 
	// Spinner Toolbar button modifying method  
 
	 
	// DC to select font into 
	CClientDC dc(this); 
	 
	 
	// CFont object used to set the desired control fonts 
 
	m_font.CreatePointFont (100, _T ("MS Sans Serif")); 
    CFont* pOldFont = dc.SelectObject (&m_font); 
 
 
	// TEXTMETRIC is Useful to measure and place the controls 
	// in the desired positions 
 
	TEXTMETRIC tm; 
	dc.GetTextMetrics(&tm); 
	int cxChar = tm.tmAveCharWidth; 
	int cyChar = tm.tmHeight + tm.tmExternalLeading; 
 
	dc.SelectObject (pOldFont); 
 
 
    CRect rect; 
 
	//################# Red set of spinners ################# 
 
	// Edit Red // 
 
    SetButtonInfo (0, ID_EDIT_R, TBBS_SEPARATOR , cxChar * 8); 
	GetItemRect (0, &rect); 
    rect.bottom = rect.top + (cyChar + 6); 
	 
	if(!m_wndEdit_r.CreateEx(WS_EX_CLIENTEDGE, // Make a 3D-border 
      _T("EDIT"), NULL, 
     WS_TABSTOP | ES_AUTOHSCROLL | ES_LEFT | ES_NOHIDESEL | WS_VISIBLE | WS_CHILD, 
      rect, this, ID_EDIT_R)) 
 
	return -1; 
	 
	// Spinner Red // 
 
	m_wndEdit_r.SetFont (&m_font); 
 
	SetButtonInfo (1, ID_SPIN_R, TBBS_SEPARATOR, cxChar * 3); 
	GetItemRect (1, &rect); 
    rect.bottom = rect.top + (cyChar + 6); 
 
	 
	if (!m_wndSpin_r.Create(WS_CHILD | WS_VISIBLE | // dwStyle 
						UDS_ALIGNRIGHT | UDS_SETBUDDYINT | UDS_ARROWKEYS, 
						rect,					// rect 
						this,		// CWnd* pParentWnd 
						ID_SPIN_R))		// UINT  nID 
	 
	 
	return -1; 
	 
	m_wndSpin_r.SetFont (&m_font); 
 
 
	//################# Green set of spinners ################# 
 
	// Edit Green // 
 
	SetButtonInfo (2, ID_EDIT_G, TBBS_SEPARATOR , cxChar * 8); 
	GetItemRect (2, &rect); 
    rect.bottom = rect.top + (cyChar + 6); 
	 
	if(!m_wndEdit_g.CreateEx(WS_EX_CLIENTEDGE, // Make a 3D-border 
      _T("EDIT"), NULL, 
     WS_TABSTOP |  ES_AUTOHSCROLL | ES_LEFT | ES_NOHIDESEL | WS_VISIBLE | WS_CHILD, 
      rect, this, ID_EDIT_G)) 
 
	return -1; 
 
	m_wndEdit_g.SetFont (&m_font); 
 
	 
	// Spinner Green // 
 
	SetButtonInfo (3, ID_SPIN_G, TBBS_SEPARATOR, cxChar * 3); 
	GetItemRect (3, &rect); 
    rect.bottom = rect.top + (cyChar + 6); 
 
	 
	if (!m_wndSpin_g.Create(WS_CHILD | WS_VISIBLE | // dwStyle 
						UDS_ALIGNRIGHT | UDS_SETBUDDYINT | UDS_ARROWKEYS, 
						rect,					// rect 
						this,		// CWnd* pParentWnd 
						ID_SPIN_G))		// UINT  nID 
	 
	 
	return -1; 
	 
	m_wndSpin_g.SetFont (&m_font); 
 
 
 
	//################# Blue set of spinners ################# 
 
	// Edit Blue // 
 
	SetButtonInfo (4, ID_EDIT_B, TBBS_SEPARATOR , cxChar * 8); 
	GetItemRect (4, &rect); 
    rect.bottom = rect.top + (cyChar + 6); 
 
	if(!m_wndEdit_b.CreateEx(WS_EX_CLIENTEDGE, // Make a 3D-border 
      _T("EDIT"), NULL, 
      WS_TABSTOP | ES_AUTOHSCROLL | ES_LEFT | ES_NOHIDESEL | WS_VISIBLE | WS_CHILD, 
      rect, this, ID_EDIT_B)) 
 
	return -1; 
 
 
	m_wndEdit_b.SetFont (&m_font); 
 
	 
	// Spinner Blue // 
 
	SetButtonInfo (5, ID_SPIN_B, TBBS_SEPARATOR, cxChar * 3); 
	GetItemRect (5, &rect); 
    rect.bottom = rect.top + (cyChar + 6); 
 
	 
	if (!m_wndSpin_b.Create(WS_CHILD | WS_VISIBLE | // dwStyle 
						UDS_ALIGNRIGHT | UDS_SETBUDDYINT | UDS_ARROWKEYS, 
						rect,					// rect 
						this,		// CWnd* pParentWnd 
						ID_SPIN_B))		// UINT  nID 
	 
	return -1; 
 
	m_wndSpin_b.SetFont (&m_font); 
 
 
	//################# Slider/Edit set ################# 
 
	SetButtonInfo (6, ID_EDIT_SLD, TBBS_SEPARATOR , cxChar * 8); 
	GetItemRect (6, &rect); 
    rect.bottom = rect.top + (cyChar + 6); 
	 
	if(!m_wndEdit_sld.CreateEx(WS_EX_CLIENTEDGE, // Make a 3D-border 
      _T("EDIT"), NULL, 
      //WS_TABSTOP | 
	  ES_READONLY | ES_AUTOHSCROLL | ES_LEFT | ES_NOHIDESEL | WS_VISIBLE | WS_CHILD, 
      rect, this, ID_EDIT_SLD)) 
 
	return -1; 
 
 
	m_wndEdit_sld.SetFont (&m_font); 
 
	SetButtonInfo (7, ID_SLIDER, TBBS_SEPARATOR, cxChar * 12); 
	GetItemRect (7, &rect); 
    rect.bottom = rect.top + (cyChar + 2); 
 
	 
	if (!m_wndSlider.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP |// dwStyle 
						TBS_HORZ | TBS_AUTOTICKS | 
						//TBS_NOTICKS | 
						TBS_BOTTOM, 
						rect,					// rect 
						this,		// CWnd* pParentWnd 
						ID_SLIDER))		// UINT  nID 
	 
	return -1; 
 
	 
	 
	// Not required to be visible, so we hide it by not using// 
	// the WS_VISIBLE style bit // 
 
	if (!m_wndSpin_sld.Create(WS_CHILD | // dwStyle 
						UDS_SETBUDDYINT, 
						rect,					// rect 
						this,		// CWnd* pParentWnd 
						ID_SPIN_SLD))		// UINT  nID 
	 
	return -1; 
 
 
	// Set the edit box default numbers 
 
	SetPositions(); 
 
 
	return 0; 
 
} 
 
 
void CSpinToolBar::SetPositions() 
{ 
	 
 
	// Set Red Spinner and Edit box value is OK 
 
	m_wndSpin_r.SetRange(0, 255); 
	m_wndSpin_r.SetBuddy(&m_wndEdit_r); 
	m_wndSpin_r.SetPos(m_nRed); 
 
	 
	// Set Green Spinner and Edit box value is OK 
 
	m_wndSpin_g.SetRange(0, 255); 
	m_wndSpin_g.SetBuddy(&m_wndEdit_g); 
	m_wndSpin_g.SetPos(m_nGreen); 
	 
	 
	// Set Blue Spinner and Edit box value is OK 
 
	m_wndSpin_b.SetRange(0, 255); 
	m_wndSpin_b.SetBuddy(&m_wndEdit_b); 
	m_wndSpin_b.SetPos(m_nBlue); 
 
	 
	// Set Slider, Invisible Spinner and Edit box value is OK 
	 
	m_wndSlider.SetRange(0, 255); 
	m_wndSpin_sld.SetRange(0, 255); 
	 
	m_wndSpin_sld.SetBuddy(&m_wndEdit_sld); 
	 
	m_wndSlider.SetPos(m_nGradValue); 
	m_wndSpin_sld.SetPos(m_wndSlider.GetPos()); 
 
 
} 
 
void CSpinToolBar::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  
{ 
		 
	CSliderCtrl* m_wndSlider = (CSliderCtrl*) pScrollBar; 
	m_wndSpin_sld.SetPos(m_wndSlider->GetPos()); 
 
	HCURSOR hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR_SLIDER);  
	::SetCursor(hCursor); 
	 
	CToolBar::OnHScroll(nSBCode, nPos, pScrollBar); 
} 
 
void CSpinToolBar::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  
{ 
	 
	CSpinButtonCtrl* m_wndSpin_r = (CSpinButtonCtrl*) pScrollBar; 
	CSpinButtonCtrl* m_wndSpin_g = (CSpinButtonCtrl*) pScrollBar; 
	CSpinButtonCtrl* m_wndSpin_b = (CSpinButtonCtrl*) pScrollBar; 
 
	HCURSOR hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR_SPINNER);  
	::SetCursor(hCursor);	 
 
	CToolBar::OnVScroll(nSBCode, nPos, pScrollBar); 
}