📄 spinnerdlg.cpp
字号:
// SpinnerDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Controls.h"
#include "SpinnerDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define _USEDELTAPOS
/////////////////////////////////////////////////////////////////////////////
// CSpinnerDlg property page
IMPLEMENT_DYNCREATE(CSpinnerDlg, CPropertyPage)
CSpinnerDlg::CSpinnerDlg() : CPropertyPage(CSpinnerDlg::IDD)
{
//{{AFX_DATA_INIT(CSpinnerDlg)
m_bBuddyWrap = FALSE;
m_bBuddyInteger = TRUE;
m_bBuddyThousands = FALSE;
m_nBuddyUpper = 10000;
m_nBuddyLower = 0;
m_nBuddyOrientation = 0;
m_nBuddyAccelerate = 0;
//}}AFX_DATA_INIT
m_psp.dwFlags &= ~PSP_HASHELP;
}
CSpinnerDlg::~CSpinnerDlg()
{
}
void CSpinnerDlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSpinnerDlg)
DDX_Control(pDX, IDC_SOLO_BLUEBAR, m_SoloBlueBar);
DDX_Control(pDX, IDC_SOLO_GREENBAR, m_SoloGreenBar);
DDX_Control(pDX, IDC_SOLO_REDBAR, m_SoloRedBar);
DDX_Control(pDX, IDC_SOLO_REDSPINNER, m_SoloRedSpinner);
DDX_Control(pDX, IDC_SOLO_GREENSPINNER, m_SoloGreenSpinner);
DDX_Control(pDX, IDC_SOLO_BLUESPINNER, m_SoloBlueSpinner);
DDX_Control(pDX, IDC_STATIC_SHOWCOLORS, m_ctlShowColors);
DDX_Control(pDX, IDC_BUDDY_SETRANGE, m_btnSetRange);
DDX_Control(pDX, IDC_BUDDY_EDIT, m_BuddyEdit);
DDX_Control(pDX, IDC_BUDDY_SPINNER, m_ctlBuddySpinner);
DDX_Check(pDX, IDC_BUDDY_WRAP, m_bBuddyWrap);
DDX_Check(pDX, IDC_BUDDY_SETINTEGER, m_bBuddyInteger);
DDX_Check(pDX, IDC_BUDDY_THOUSANDS, m_bBuddyThousands);
DDX_Text(pDX, IDC_BUDDY_UPPER, m_nBuddyUpper);
DDX_Text(pDX, IDC_BUDDY_LOWER, m_nBuddyLower);
DDX_Radio(pDX, IDC_BUDDY_VERTICAL, m_nBuddyOrientation);
DDX_Radio(pDX, IDC_BUDDY_ACCELERATE, m_nBuddyAccelerate);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSpinnerDlg, CPropertyPage)
//{{AFX_MSG_MAP(CSpinnerDlg)
ON_WM_HSCROLL()
ON_BN_CLICKED(IDC_BUDDY_SETINTEGER, OnBuddySetinteger)
ON_BN_CLICKED(IDC_BUDDY_THOUSANDS, OnBuddyThousands)
ON_BN_CLICKED(IDC_BUDDY_WRAP, OnBuddyWrap)
ON_BN_CLICKED(IDC_BUDDY_SETRANGE, OnBuddySetrange)
ON_EN_CHANGE(IDC_BUDDY_LOWER, OnChangeBuddyRange)
ON_BN_CLICKED(IDC_BUDDY_VERTICAL, OnBuddyOrientation)
ON_BN_CLICKED(IDC_BUDDY_ACCELERATE, OnBuddyAccelerate)
ON_EN_CHANGE(IDC_BUDDY_UPPER, OnChangeBuddyRange)
ON_BN_CLICKED(IDC_BUDDY_HORIZONTAL, OnBuddyOrientation)
ON_BN_CLICKED(IDC_BUDDY_NOACCELERATE, OnBuddyAccelerate)
ON_NOTIFY(UDN_DELTAPOS, IDC_SOLO_REDSPINNER, OnDeltaposSoloRedspinner)
ON_NOTIFY(UDN_DELTAPOS, IDC_SOLO_GREENSPINNER, OnDeltaposSoloGreenspinner)
ON_NOTIFY(UDN_DELTAPOS, IDC_SOLO_BLUESPINNER, OnDeltaposSoloBluespinner)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSpinnerDlg message handlers
BOOL CSpinnerDlg::OnInitDialog()
{
CPropertyPage::OnInitDialog();
m_ctlBuddySpinner.SetRange (m_nBuddyLower, m_nBuddyUpper);
m_dwBuddyStyle = m_ctlBuddySpinner.GetStyle ();
m_dwBuddyStyle &= ~UDS_AUTOBUDDY;
m_btnSetRange.EnableWindow (FALSE);
m_SoloRedSpinner.SetRange (0, 255);
m_SoloRedSpinner.SetPos (255);
m_SoloGreenSpinner.SetRange (0, 255);
m_SoloGreenSpinner.SetPos (255);
m_SoloBlueSpinner.SetRange (0, 255);
m_SoloBlueSpinner.SetPos (255);
UDACCEL *pAccel;
int nCount = m_ctlBuddySpinner.GetAccel(0, NULL);
pAccel = new UDACCEL [nCount];
m_ctlBuddySpinner.GetAccel(nCount, pAccel);
UDACCEL Accel[] =
{
0, 1,
2, 10,
5, 25,
8, 100,
10, 250
};
BOOL bResult = m_ctlBuddySpinner.SetAccel(5, Accel);
m_SoloRedBar.SetBarColor (RGB (0xff, 0x0, 0x0));
m_SoloRedBar.SetMinMax (0, 255);
m_SoloRedBar.UsePercent (false);
m_SoloRedBar.SetBarText (_T("Red = 255"));
m_SoloRedBar.SetPosition (255);
m_SoloGreenBar.SetBarColor (RGB (0x0, 0xff, 0x0));
m_SoloGreenBar.SetBarTextColor (RGB (0x0, 0x0, 0x0));
m_SoloGreenBar.SetMinMax (0, 255);
m_SoloGreenBar.UsePercent (false);
m_SoloGreenBar.SetBarText (_T("Green = 255"));
m_SoloGreenBar.SetPosition (255);
m_SoloBlueBar.SetBarColor (RGB (0x0, 0x0, 0xff));
m_SoloBlueBar.SetMinMax (0, 255);
m_SoloBlueBar.UsePercent (false);
m_SoloBlueBar.SetBarText (_T("Blue = 255"));
m_SoloBlueBar.SetPosition (255);
delete [] pAccel;
return TRUE;
}
void CSpinnerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
static int nRed = 255;
static int nGreen = 255;
static int nBlue = 255;
//
// Don't need to deal with the end scroll.
//
if (nSBCode == SB_ENDSCROLL)
return;
#ifndef _USEDELTAPOS
if (pScrollBar == (CScrollBar *) &m_SoloRedSpinner)
{
CString strText;
nRed = nPos;
strText.Format ("Red = %d", nPos);
m_SoloRedBar.SetBarText (strText);
m_SoloRedBar.SetPosition (nPos);
m_SoloRedBar.Update ();
m_ctlShowColors.SetBkgndColor (RGB(nRed, nGreen, nBlue));
return;
}
if (pScrollBar == (CScrollBar *) &m_SoloBlueSpinner)
{
CString strText;
nBlue = nPos;
strText.Format ("Blue = %d", nPos);
m_SoloBlueBar.SetBarText (strText);
m_SoloBlueBar.SetPosition (nPos);
m_SoloBlueBar.Update ();
m_ctlShowColors.SetBkgndColor (RGB(nRed, nGreen, nBlue));
return;
}
if (pScrollBar == (CScrollBar *) &m_SoloGreenSpinner)
{
CString strText;
nGreen = nPos;
strText.Format ("Green = %d", nPos);
m_SoloGreenBar.SetBarText (strText);
m_SoloGreenBar.SetPosition (nPos);
m_SoloGreenBar.Update ();
m_ctlShowColors.SetBkgndColor (RGB(nRed, nGreen, nBlue));
return;
}
#endif
}
void CSpinnerDlg::OnBuddySetinteger()
{
UpdateData (TRUE);
if (m_bBuddyInteger)
{
m_dwBuddyStyle |= UDS_SETBUDDYINT;
}
else
{
m_dwBuddyStyle &= ~UDS_SETBUDDYINT;
}
RecreateBuddy ();
}
void CSpinnerDlg::OnBuddyThousands()
{
UpdateData (TRUE);
if (m_bBuddyThousands)
{
m_dwBuddyStyle &= ~UDS_NOTHOUSANDS;
}
else
{
m_dwBuddyStyle |= UDS_NOTHOUSANDS;
}
RecreateBuddy ();
}
void CSpinnerDlg::OnBuddyWrap()
{
UpdateData (TRUE);
if (m_bBuddyWrap)
{
m_dwBuddyStyle |= UDS_WRAP;
}
else
{
m_dwBuddyStyle &= ~UDS_WRAP;
}
RecreateBuddy ();
}
void CSpinnerDlg::RecreateBuddy()
{
CRect rc, rcEdit;
m_ctlBuddySpinner.GetWindowRect (&rc);
m_BuddyEdit.GetWindowRect (&rcEdit);
rcEdit.left = rc.left;
ScreenToClient (&rc);
ScreenToClient (&rcEdit);
int nLower, nUpper, nPos;
m_ctlBuddySpinner.GetRange32 (nLower, nUpper);
nPos = m_ctlBuddySpinner.GetPos ();
m_ctlBuddySpinner.DestroyWindow ();
m_ctlBuddySpinner.Create (m_dwBuddyStyle, rc, this, IDC_BUDDY_SPINNER);
m_BuddyEdit.MoveWindow (&rcEdit, TRUE);
m_ctlBuddySpinner.SetBuddy (&m_BuddyEdit);
m_ctlBuddySpinner.SetRange32 (nLower, nUpper);
m_ctlBuddySpinner.SetPos (nPos);
m_BuddyEdit.SetFocus ();
}
void CSpinnerDlg::OnBuddySetrange()
{
UpdateData (TRUE);
m_ctlBuddySpinner.SetRange32 (m_nBuddyLower, m_nBuddyUpper);
m_btnSetRange.EnableWindow (FALSE);
}
void CSpinnerDlg::OnChangeBuddyRange()
{
m_btnSetRange.EnableWindow (TRUE);
}
void CSpinnerDlg::OnBuddyOrientation()
{
UpdateData (TRUE);
if (m_nBuddyOrientation == 0)
{
m_dwBuddyStyle &= ~UDS_HORZ;
}
else
{
m_dwBuddyStyle |= UDS_HORZ;
}
RecreateBuddy ();
}
void CSpinnerDlg::OnBuddyAccelerate()
{
UpdateData (TRUE);
if (m_nBuddyAccelerate == 0)
{
UDACCEL Accel[] =
{
0, 1,
2, 10,
5, 25,
8, 100,
10, 250
};
m_ctlBuddySpinner.SetAccel(5, Accel);
}
else
{
UDACCEL Accel[] =
{
0, 1,
};
m_ctlBuddySpinner.SetAccel(1, Accel);
}
}
void CSpinnerDlg::OnDeltaposSoloRedspinner(NMHDR* pNMHDR, LRESULT* pResult)
{
NMUPDOWN* pNMUpDown = (NMUPDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
#ifdef _USEDELTAPOS
CString strText;
int nRed = pNMUpDown->iPos + pNMUpDown->iDelta;
int nGreen = m_SoloGreenBar.GetPosition ();
int nBlue = m_SoloBlueBar.GetPosition ();
if (nRed < 0)
nRed = 0;
if (nRed > 255)
nRed = 255;
strText.Format ("Red = %d", nRed);
m_SoloRedBar.SetBarText (strText);
m_SoloRedBar.SetPosition (nRed);
m_SoloRedBar.Update ();
m_ctlShowColors.SetBkgndColor (RGB(nRed, nGreen, nBlue));
#endif
*pResult = 0;
}
void CSpinnerDlg::OnDeltaposSoloGreenspinner(NMHDR* pNMHDR, LRESULT* pResult)
{
NMUPDOWN* pNMUpDown = (NMUPDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
#ifdef _USEDELTAPOS
CString strText;
int nGreen = pNMUpDown->iPos + pNMUpDown->iDelta;
int nRed = m_SoloRedBar.GetPosition ();
int nBlue = m_SoloBlueBar.GetPosition ();
if (nGreen < 0)
nGreen = 0;
if (nGreen > 255)
nGreen = 255;
strText.Format ("Green = %d", nGreen);
m_SoloGreenBar.SetBarText (strText);
m_SoloGreenBar.SetPosition (nGreen);
m_SoloGreenBar.Update ();
m_ctlShowColors.SetBkgndColor (RGB(nRed, nGreen, nBlue));
#endif
*pResult = 0;
}
void CSpinnerDlg::OnDeltaposSoloBluespinner(NMHDR* pNMHDR, LRESULT* pResult)
{
NMUPDOWN* pNMUpDown = (NMUPDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
#ifdef _USEDELTAPOS
CString strText;
int nBlue = pNMUpDown->iPos + pNMUpDown->iDelta;
int nRed = m_SoloRedBar.GetPosition ();
int nGreen = m_SoloGreenBar.GetPosition ();
if (nBlue < 0)
nBlue = 0;
if (nBlue > 255)
nBlue = 255;
strText.Format ("Blue = %d", nBlue);
m_SoloBlueBar.SetBarText (strText);
m_SoloBlueBar.SetPosition (nBlue);
m_SoloBlueBar.Update ();
m_ctlShowColors.SetBkgndColor (RGB(nRed, nGreen, nBlue));
#endif
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -