📄 spinnertoolbar.cpp
字号:
// SpinToolBar.cpp : implementation file
//
#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;
//##################################################//
//载入工具栏
if (!LoadToolBar (IDR_SPINNER_BAR))
return -1;
//##################################################//
// Spinner Toolbar button modifying method
// 字体设备
CClientDC dc(this);
// 设置字体
m_font.CreatePointFont (100, _T ("MS Sans Serif"));
CFont* pOldFont = dc.SelectObject (&m_font);
// TEXTMETRIC被用来控制控件的位置
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
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
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 | // 风格
UDS_ALIGNRIGHT | UDS_SETBUDDYINT | UDS_ARROWKEYS,
rect, // 位置
this, // 父窗口
ID_SPIN_R)) // ID
return -1;
m_wndSpin_r.SetFont (&m_font);
//################# Green set of spinners #################
// 绿色Edit
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
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 |
UDS_ALIGNRIGHT | UDS_SETBUDDYINT | UDS_ARROWKEYS,
rect,
this,
ID_SPIN_G))
return -1;
m_wndSpin_g.SetFont (&m_font);
//################# Blue set of spinners #################
// 蓝色Edit
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
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 |
UDS_ALIGNRIGHT | UDS_SETBUDDYINT | UDS_ARROWKEYS,
rect,
this,
ID_SPIN_B))
return -1;
m_wndSpin_b.SetFont (&m_font);
//################# 滑动条,编辑框,微调组件,用于控制梯度 #################
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 |// 风格
TBS_HORZ | TBS_AUTOTICKS |
//TBS_NOTICKS |
TBS_BOTTOM,
rect, // 位置
this, // 父窗口
ID_SLIDER)) // ID
return -1;
// 不需要可见,不使用WS_VISIBLE风格
if (!m_wndSpin_sld.Create(WS_CHILD |
UDS_SETBUDDYINT, //UDS_SETBUDDYYINT可以连接编辑框的显示字符
rect,
this,
ID_SPIN_SLD))
return -1;
// 设置Edit框的默认值
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());//设置Slider值
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);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -