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

📄 scrollbardlg.cpp

📁 这些源代码
💻 CPP
字号:
// ScrollBarDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Controls.h"
#include "ScrollBarDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CScrollBarDlg property page

IMPLEMENT_DYNCREATE(CScrollBarDlg, CPropertyPage)

CScrollBarDlg::CScrollBarDlg() : CPropertyPage(CScrollBarDlg::IDD)
{
	//{{AFX_DATA_INIT(CScrollBarDlg)
	m_bShowHorizontal = FALSE;
	m_bShowVertical = FALSE;
	//}}AFX_DATA_INIT
	m_psp.dwFlags &= ~PSP_HASHELP;
	m_HorzProgress.SetMinMax (0, 100);
	m_VertProgress.SetMinMax (0, 100);
}

CScrollBarDlg::~CScrollBarDlg()
{
}

void CScrollBarDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CScrollBarDlg)
	DDX_Control(pDX, IDC_VERTSCROLLBAR, m_VertScroll);
	DDX_Control(pDX, IDC_HORZSCROLLBAR, m_HorzScroll);
	DDX_Control(pDX, IDC_VERTPROGRESSBAR, m_VertProgress);
	DDX_Control(pDX, IDC_HORZPROGRESSBAR, m_HorzProgress);
	DDX_Check(pDX, IDC_SHOWHORIZONTAL, m_bShowHorizontal);
	DDX_Check(pDX, IDC_SHOWVERTICAL, m_bShowVertical);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CScrollBarDlg, CPropertyPage)
	//{{AFX_MSG_MAP(CScrollBarDlg)
	ON_WM_HSCROLL()
	ON_WM_VSCROLL()
	ON_BN_CLICKED(IDC_SHOWVERTICAL, OnShowvertical)
	ON_BN_CLICKED(IDC_SHOWHORIZONTAL, OnShowhorizontal)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CScrollBarDlg message handlers

BOOL CScrollBarDlg::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();

	memset (&m_siHorz, '\0', sizeof (SCROLLINFO));
	m_siHorz.cbSize = sizeof (SCROLLINFO);
	m_siHorz.nMin = 0;
	m_siHorz.nMax = 100;
	m_siHorz.nPage = 10;
	m_siHorz.nPos = 0;
	m_siHorz.fMask = SIF_ALL;
	m_HorzScroll.SetScrollInfo (&m_siHorz);
	SetScrollInfo (SB_HORZ, &m_siHorz);

	memset (&m_siVert, '\0', sizeof (SCROLLINFO));
	m_siVert.cbSize = sizeof (SCROLLINFO);
	m_siVert.nMin = 0;
	m_siVert.nMax = 100;
	m_siVert.nPage = 10;
	m_siVert.nPos = 100;
	m_siVert.fMask = SIF_ALL;
	m_VertScroll.SetScrollInfo (&m_siVert);
	SetScrollInfo (SB_VERT, &m_siVert);

//	m_HorzProgress.SetMinMax (m_siHorz.nMin, m_siHorz.nMax);
//	m_VertProgress.SetMinMax (m_siVert.nMin, m_siVert.nMax);
	m_HorzProgress.SetMinMax (m_siHorz.nMin, m_HorzScroll.GetScrollLimit ());
	m_VertProgress.SetMinMax (m_siVert.nMin, m_VertScroll.GetScrollLimit ());

	ShowScrollBar (SB_HORZ, m_bShowHorizontal);
	ShowScrollBar (SB_VERT, m_bShowVertical);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CScrollBarDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
//
//	The scroll bar isn't the only control that sends
//	scroll messages. On a dialog box, always test for
//	the identity of a scroll bar.
//
	if (pScrollBar != &m_HorzScroll)
	{
//		CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
//		return;
	}
//	m_HorzScroll.GetScrollInfo (&m_siHorz);
	switch (nSBCode)
	{
		case SB_LEFT:			//	Scroll to far left.
			m_siHorz.nPos = m_siHorz.nMin;
			break;
		case SB_ENDSCROLL:		//	End scroll.
			return;
		case SB_LINELEFT:		//	Scroll left.
			m_siHorz.nPos -= 1;
			if (m_siHorz.nPos < m_siHorz.nMin)
				m_siHorz.nPos = m_siHorz.nMin;
			break;
		case SB_LINERIGHT:		//	Scroll right.
			m_siHorz.nPos += 1;
			if (m_siHorz.nPos > m_siHorz.nMax)
				m_siHorz.nPos = m_siHorz.nMax;
			break;
		case SB_PAGELEFT:		//	Scroll one page left.
			m_siHorz.nPos -= m_siHorz.nPage;
			if (m_siHorz.nPos < m_siHorz.nMin)
				m_siHorz.nPos = m_siHorz.nMin;
			break;
		case SB_PAGERIGHT:		//	Scroll one page right.
			m_siHorz.nPos += m_siHorz.nPage;
			if (m_siHorz.nPos > m_siHorz.nMax)
				m_siHorz.nPos = m_siHorz.nMax;
			break;
		case SB_RIGHT:			//	Scroll to far right.
			m_siHorz.nPos = m_siHorz.nMax;
			break;
		case SB_THUMBPOSITION:	//	Scroll to absolute position. The current position is specified by the nPos parameter.
			m_siHorz.nPos = nPos;
			break;
		case SB_THUMBTRACK:		//	Drag scroll box to specified position. The current position is specified by the nPos parameter
			m_siHorz.nPos = nPos;
			break;
	}
	m_siHorz.fMask = SIF_ALL;
	m_HorzScroll.SetScrollInfo (&m_siHorz, TRUE);
	SetScrollInfo (SB_HORZ, &m_siHorz);
	m_HorzProgress.SetPosition (m_siHorz.nPos);
	m_HorzProgress.Update ();
	ShowScrollBar (SB_HORZ, m_bShowHorizontal);
}

void CScrollBarDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	if (pScrollBar != &m_VertScroll)
	{
//		CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
//		return;
	}
	switch (nSBCode)
	{
		case SB_TOP:			//	Scroll to far left/top.
			m_siVert.nPos = m_siVert.nMin;
			break;
		case SB_ENDSCROLL:		//	End scroll.
			return;
		case SB_LINEUP:		//	Scroll left/up.
			m_siVert.nPos -= 1;
			if (m_siVert.nPos < m_siVert.nMin)
				m_siVert.nPos = m_siVert.nMin;
			break;
		case SB_LINEDOWN:		//	Scroll right/down.
			m_siVert.nPos += 1;
			if (m_siVert.nPos > m_siVert.nMax)
				m_siVert.nPos = m_siVert.nMax;
			break;
		case SB_PAGEUP:		//	Scroll one page left/up.
			m_siVert.nPos -= m_siVert.nPage;
			if (m_siVert.nPos < m_siVert.nMin)
				m_siVert.nPos = m_siVert.nMin;
			break;
		case SB_PAGEDOWN:		//	Scroll one page right/down.
			m_siVert.nPos += m_siVert.nPage;
			if (m_siVert.nPos > m_siVert.nMax)
				m_siVert.nPos = m_siVert.nMax;
			break;
		case SB_BOTTOM:			//	Scroll to far right/bottom.
			m_siVert.nPos = m_siVert.nMax;
			break;
		case SB_THUMBPOSITION:	//	Scroll to absolute position. The current position is specified by the nPos parameter.
			m_siVert.nPos = nPos;
			break;
		case SB_THUMBTRACK:		//	Drag scroll box to specified position. The current position is specified by the nPos parameter
			m_siVert.nPos = nPos;
			break;
	}
	m_siVert.fMask = SIF_ALL;
	m_VertScroll.SetScrollInfo (&m_siVert, TRUE);
	m_VertProgress.SetPosition (m_VertScroll.GetScrollLimit() - m_siVert.nPos + m_siVert.nMin);
	m_VertProgress.Update ();
	SetScrollInfo (SB_VERT, &m_siVert);
	ShowScrollBar (SB_VERT, m_bShowVertical);
}

void CScrollBarDlg::OnShowvertical() 
{
	UpdateData (TRUE);
//	ShowScrollBar (SB_VERT, m_bShowVertical);
	::ShowScrollBar (this->m_hWnd, SB_VERT, m_bShowVertical);
}

void CScrollBarDlg::OnShowhorizontal() 
{
	UpdateData (TRUE);
//	ShowScrollBar (SB_HORZ, m_bShowHorizontal);
	::ShowScrollBar (this->m_hWnd, SB_HORZ, m_bShowHorizontal);
}

⌨️ 快捷键说明

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