📄 scrollbardlg.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 + -