⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sliderdlg.cpp

📁 这些源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SliderDlg.cpp : implementation file
//

#include "stdafx.h"
#include "controls.h"
#include "SliderDlg.h"
#include	"shlwapi.h"
#include	"commctrl.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSliderDlg property page

IMPLEMENT_DYNCREATE(CSliderDlg, CPropertyPage)

CSliderDlg::CSliderDlg() : CPropertyPage(CSliderDlg::IDD)
{
	//{{AFX_DATA_INIT(CSliderDlg)
	m_bVertTickMarks = FALSE;
	m_bVertAutoTick = FALSE;
	m_nVertPoints = 0;
	m_bVertEnableSel = FALSE;
	m_nVertLowerLimit = 0;
	m_nVertUpperLimit = 100;
	m_nVertSlider = 0;
	m_nVertTickFreq = 2;
	m_bHorzAutoTick = FALSE;
	m_bHorzEnableSel = FALSE;
	m_nHorzLowerLimit = 0;
	m_nHorzPoints = 0;
	m_nHorzSlider = 0;
	m_bHorzTickMarks = FALSE;
	m_nHorzUpperLimit = 100;
	m_nHorzTickFreq = 1;
	//}}AFX_DATA_INIT
	m_psp.dwFlags &= ~PSP_HASHELP;
	m_nVertSelMin = -1;
	m_nVertSelMax = -1;
}

CSliderDlg::~CSliderDlg()
{
}

void CSliderDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSliderDlg)
	DDX_Control(pDX, IDC_HORZ_TICKFREQEDIT, m_ctlHorzTickFreq);
	DDX_Control(pDX, IDC_HORZ_TICKFREQSPIN, m_ctlHorzTickFreqSpinner);
	DDX_Control(pDX, IDC_HORZ_SLIDER, m_ctlHorzSlider);
	DDX_Control(pDX, IDC_VERT_SLIDER, m_ctlVertSlider);
	DDX_Control(pDX, IDC_VERT_TICKFREQEDIT, m_ctlVertTickFreq);
	DDX_Control(pDX, IDC_VERT_TICKFREQSPIN, m_ctlVertTickFreqSpinner);
	DDX_Check(pDX, IDC_VERT_TICKMARKS, m_bVertTickMarks);
	DDX_Check(pDX, IDC_VERT_AUTOTICK, m_bVertAutoTick);
	DDX_Radio(pDX, IDC_VERT_POINTSBOTH, m_nVertPoints);
	DDX_Check(pDX, IDC_VERT_ENABLESEL, m_bVertEnableSel);
	DDX_Text(pDX, IDC_VERT_LOWEREDIT, m_nVertLowerLimit);
	DDX_Text(pDX, IDC_VERT_UPPEREDIT, m_nVertUpperLimit);
	DDX_Slider(pDX, IDC_VERT_SLIDER, m_nVertSlider);
	DDX_Text(pDX, IDC_VERT_TICKFREQEDIT, m_nVertTickFreq);
	DDX_Check(pDX, IDC_HORZ_AUTOTICK, m_bHorzAutoTick);
	DDX_Check(pDX, IDC_HORZ_ENABLESEL, m_bHorzEnableSel);
	DDX_Text(pDX, IDC_HORZ_LOWEREDIT, m_nHorzLowerLimit);
	DDX_Radio(pDX, IDC_HORZ_POINTSBOTH, m_nHorzPoints);
	DDX_Slider(pDX, IDC_HORZ_SLIDER, m_nHorzSlider);
	DDX_Check(pDX, IDC_HORZ_TICKMARKS, m_bHorzTickMarks);
	DDX_Text(pDX, IDC_HORZ_UPPEREDIT, m_nHorzUpperLimit);
	DDX_Text(pDX, IDC_HORZ_TICKFREQEDIT, m_nHorzTickFreq);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSliderDlg, CPropertyPage)
	//{{AFX_MSG_MAP(CSliderDlg)
	ON_BN_CLICKED(IDC_HORZ_ENABLESEL, OnHorzEnablesel)
	ON_EN_CHANGE(IDC_HORZ_LOWEREDIT, OnChangeHorzLoweredit)
	ON_BN_CLICKED(IDC_HORZ_POINTSBOTH, OnHorzPoints)
	ON_BN_CLICKED(IDC_HORZ_TICKMARKS, OnHorzTickmarks)
	ON_EN_CHANGE(IDC_HORZ_UPPEREDIT, OnChangeHorzUpperedit)
	ON_BN_CLICKED(IDC_HORZ_AUTOTICK, OnHorzAutotick)
	ON_EN_CHANGE(IDC_HORZ_TICKFREQEDIT, OnChangeHorzTickfreqedit)
	ON_BN_CLICKED(IDC_VERT_ENABLESEL, OnVertEnablesel)
	ON_EN_CHANGE(IDC_VERT_LOWEREDIT, OnChangeVertLoweredit)
	ON_BN_CLICKED(IDC_VERT_POINTSBOTH, OnVertPoints)
	ON_BN_CLICKED(IDC_VERT_TICKMARKS, OnVertTickmarks)
	ON_EN_CHANGE(IDC_VERT_UPPEREDIT, OnChangeVertUpperedit)
	ON_BN_CLICKED(IDC_VERT_AUTOTICK, OnVertAutotick)
	ON_EN_CHANGE(IDC_VERT_TICKFREQEDIT, OnChangeVertTickfreqedit)
	ON_WM_HSCROLL()
	ON_BN_CLICKED(IDC_CLEARVERTSEL, OnClearvertsel)
	ON_BN_CLICKED(IDC_SETVERTSEL, OnSetvertsel)
	ON_BN_CLICKED(IDC_HORZ_POINTSBOTTOM, OnHorzPoints)
	ON_BN_CLICKED(IDC_HORZ_POINTSTOP, OnHorzPoints)
	ON_BN_CLICKED(IDC_VERT_POINTSRIGHT, OnVertPoints)
	ON_BN_CLICKED(IDC_VERT_POINTSLEFT, OnVertPoints)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_VERT_SLIDER, OnCustomdrawVertSlider)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSliderDlg message handlers
/////////////////////////////////////////////////////////////////////////////
// Functions common to horizontal and vertical sliders
/////////////////////////////////////////////////////////////////////////////

BOOL CSliderDlg::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	AdjustSliderRect (m_ctlVertSlider);
	AdjustSliderRect (m_ctlHorzSlider);
	m_ctlVertSlider.SetSelection (m_nVertLowerLimit, m_nVertUpperLimit);
	m_ctlHorzSlider.SetRange (m_nHorzLowerLimit, m_nHorzUpperLimit, TRUE);
	m_ctlVertSlider.SetRange (m_nVertLowerLimit, m_nVertUpperLimit, TRUE);
	m_ctlVertSlider.SetPos (m_nVertUpperLimit);
	m_ctlVertSlider.SetTicFreq (m_nVertTickFreq);
	::EnableWindow (GetDlgItem (IDC_CLEARVERTSEL)->m_hWnd, FALSE);
	::EnableWindow (GetDlgItem (IDC_SETVERTSEL)->m_hWnd, FALSE);
	return TRUE;
}

void CSliderDlg::AdjustSliderRect(CSliderCtrl &ctlSlider)
{
	int nExtra = 0;
	DWORD dwSliderStyle = ctlSlider.GetStyle ();
	DWORD dwSliderStyleEx = ctlSlider.GetExStyle ();
//
//	If the control has a border or edge, give it a bit extra
//	on the right or bottom to account for the edge.
//
	if ((dwSliderStyle & WS_BORDER) ||
		(dwSliderStyleEx & (WS_EX_CLIENTEDGE | WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME)))
		nExtra = 4;

	CRect rcThumb, rcSlider;
	ctlSlider.GetThumbRect (&rcThumb);
	ctlSlider.GetWindowRect (&rcSlider);
	ScreenToClient (&rcSlider);
	if (dwSliderStyle & TBS_VERT)
	{
		if (!(dwSliderStyle & TBS_NOTICKS))
		{
			if (!(dwSliderStyle & (TBS_LEFT | TBS_BOTH)))
				nExtra += 4;
		}
		rcSlider.right = rcSlider.left + rcThumb.left + rcThumb.right + nExtra;
	}
	else
		rcSlider.bottom = rcSlider.top + rcThumb.top + rcThumb.bottom + nExtra;
	ctlSlider.MoveWindow (&rcSlider, TRUE);
}

/////////////////////////////////////////////////////////////////////////////
// CSliderDlg message handlers
/////////////////////////////////////////////////////////////////////////////
// Horizontal Slider Functions
/////////////////////////////////////////////////////////////////////////////

void CSliderDlg::OnChangeHorzLoweredit() 
{
	if (m_ctlHorzSlider.m_hWnd == NULL)
		return;
	int nMin, nMax;
	UpdateData (TRUE);
	if (m_nHorzLowerLimit >= m_nHorzUpperLimit)
	{
		nMin = m_ctlHorzSlider.GetRangeMin ();
		m_nHorzLowerLimit = nMin;
		UpdateData (FALSE);
		return;
	}
	m_ctlHorzSlider.GetRange (nMin, nMax);
	m_ctlHorzSlider.SetRange (m_nHorzLowerLimit, nMax, TRUE);
	if (m_ctlHorzSlider.GetStyle () & TBS_ENABLESELRANGE)
		m_ctlHorzSlider.SetSelection (m_nHorzLowerLimit, m_ctlHorzSlider.GetPos ());
	m_ctlHorzSlider.Invalidate ();
}

void CSliderDlg::OnChangeHorzUpperedit() 
{
	if (m_ctlHorzSlider.m_hWnd == NULL)
		return;
	int nMin, nMax;
	UpdateData (TRUE);
	if (m_nHorzUpperLimit <= m_nHorzLowerLimit)
	{
		nMax = m_ctlHorzSlider.GetRangeMax ();
		m_nHorzUpperLimit = nMax;
		UpdateData (FALSE);
		return;
	}
	m_ctlHorzSlider.GetRange (nMin, nMax);
	m_ctlHorzSlider.SetRange (nMin, m_nHorzUpperLimit, TRUE);
}

void CSliderDlg::OnHorzPoints() 
{
	UpdateData (TRUE);
	switch (m_nHorzPoints)
	{
		case 0:
			m_ctlHorzSlider.ModifyStyle (TBS_BOTTOM | TBS_TOP, TBS_BOTH, TRUE);
			break;
		case 1:
			m_ctlHorzSlider.ModifyStyle (TBS_BOTTOM | TBS_BOTH, TBS_TOP, TRUE);
			break;
		case 2:
			m_ctlHorzSlider.ModifyStyle (TBS_BOTH | TBS_TOP, TBS_BOTTOM, TRUE);
			break;
	}
}

void CSliderDlg::OnHorzTickmarks() 
{
	UpdateData (TRUE);
	int nMin, nMax;
	m_ctlHorzSlider.GetRange (nMin, nMax);
	if (m_bHorzTickMarks)
	{
		if (m_bHorzAutoTick)
		{
			m_ctlHorzSlider.ModifyStyle (TBS_NOTICKS, 0, TRUE);
			m_ctlHorzSlider.SetTicFreq (-1);
		}
		else
		{
			m_ctlHorzSlider.ModifyStyle (0, TBS_AUTOTICKS, TRUE);
			m_ctlHorzSlider.SetTicFreq (-1);
			m_ctlHorzSlider.ModifyStyle (TBS_NOTICKS | TBS_AUTOTICKS, 0, TRUE);
			m_ctlHorzSlider.SetTicFreq (m_nHorzTickFreq);
		}
	}
	else
	{
		m_ctlHorzSlider.ModifyStyle (0, TBS_NOTICKS, TRUE);
	}
	AdjustSliderRect (m_ctlHorzSlider);
	m_ctlHorzSlider.SetRange (nMin, nMax, TRUE);
}

void CSliderDlg::OnHorzAutotick() 
{
	UpdateData (TRUE);
	int nMin, nMax;
	m_ctlHorzSlider.GetRange (nMin, nMax);
	if (m_bHorzAutoTick)
	{
		m_ctlHorzSlider.SetTicFreq (-1);
		m_ctlHorzSlider.ModifyStyle (0, TBS_AUTOTICKS, TRUE);
		m_ctlHorzTickFreq.EnableWindow (FALSE);
		m_ctlHorzTickFreqSpinner.EnableWindow (FALSE);
	}
	else
	{
		m_ctlHorzSlider.ModifyStyle (TBS_AUTOTICKS, 0, TRUE);
		m_ctlHorzSlider.SetTicFreq (m_nHorzTickFreq);
		m_ctlHorzTickFreq.EnableWindow (TRUE);
		m_ctlHorzTickFreqSpinner.EnableWindow (TRUE);
	}
	m_ctlHorzSlider.SetRange (nMin, nMax, TRUE);
}

void CSliderDlg::OnHorzEnablesel() 
{
	UpdateData (TRUE);
	if (m_bHorzEnableSel)
	{
		m_ctlHorzSlider.ModifyStyle (0, TBS_ENABLESELRANGE, TRUE);
		m_ctlHorzSlider.SetSelection (m_ctlHorzSlider.GetRangeMin(), m_ctlHorzSlider.GetPos());
	}
	else
	{
		m_ctlHorzSlider.ClearSel ();
		m_ctlHorzSlider.ModifyStyle (TBS_ENABLESELRANGE, 0, TRUE);
	}
	m_ctlHorzSlider.Invalidate ();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -