📄 scrollerview.cpp
字号:
// scrollerView.cpp : implementation of the CScrollerView class
//
#include "stdafx.h"
#include "scroller.h"
#include "scrollerDoc.h"
#include "scrollerView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CScrollerView
IMPLEMENT_DYNCREATE(CScrollerView, CScrollView)
BEGIN_MESSAGE_MAP(CScrollerView, CScrollView)
//{{AFX_MSG_MAP(CScrollerView)
ON_WM_SIZE()
ON_WM_KEYDOWN()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CScrollerView construction/destruction
CScrollerView::CScrollerView()
{
// TODO: add construction code here
}
CScrollerView::~CScrollerView()
{
}
BOOL CScrollerView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CScrollerView drawing
void CScrollerView::OnDraw(CDC* pDC)
{
CScrollerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int ct=sizeof(pDoc->list)/sizeof(pDoc->list[0]);
pDC->SetBkMode(TRANSPARENT);
for (int i=0;i<ct;i++)
{
CString s;
s.Format("(%d)=%u",i,pDoc->list[i]);
pDC->TextOut(0,i*lineht,s);
}
}
void CScrollerView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CScrollerDoc* doc = GetDocument();
CSize sizeTotal,sizePg;
CRect r;
GetClientRect(&r);
CDC *pDC=GetDC();
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
lineht=tm.tmHeight+tm.tmExternalLeading;
sizeTotal.cx = 100;
sizeTotal.cy = (sizeof(doc->list)/sizeof(doc->list[0]))*lineht;
sizePg.cx=10;
sizePg.cy=r.Height();
// Set beginning size
SetScrollSizes(MM_TEXT, sizeTotal,sizePg,CSize(10,lineht));
}
/////////////////////////////////////////////////////////////////////////////
// CScrollerView printing
BOOL CScrollerView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CScrollerView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CScrollerView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CScrollerView diagnostics
#ifdef _DEBUG
void CScrollerView::AssertValid() const
{
CScrollView::AssertValid();
}
void CScrollerView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CScrollerDoc* CScrollerView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CScrollerDoc)));
return (CScrollerDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CScrollerView message handlers
void CScrollerView::OnSize(UINT nType, int cx, int cy)
{
int dummy;
CScrollView::OnSize(nType, cx, cy);
CSize sizeTotal,pg,dummysize;
CRect r;
GetClientRect(&r);
pg=CSize(10,r.Height());
GetDeviceScrollSizes(dummy,sizeTotal,dummysize,dummysize);
// Set size so page is always a screen full
SetScrollSizes(MM_TEXT, sizeTotal,pg,CSize(10,lineht));
}
void CScrollerView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
BOOL processed;
for (unsigned int i=0;i<nRepCnt&&processed;i++)
processed=KeyScroll(nChar);
if (!processed)
CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}
// Convert keystrokes to quasi-mouse messages
BOOL CScrollerView::KeyScroll(UINT nChar)
{
switch (nChar)
{
case VK_UP:
OnVScroll(SB_LINEUP,0,NULL);
break;
case VK_DOWN:
OnVScroll(SB_LINEDOWN,0,NULL);
break;
case VK_LEFT:
OnHScroll(SB_LINELEFT,0,NULL);
break;
case VK_RIGHT:
OnHScroll(SB_LINERIGHT,0,NULL);
break;
case VK_HOME:
OnHScroll(SB_LEFT,0,NULL);
break;
case VK_END:
OnHScroll(SB_RIGHT,0,NULL);
break;
case VK_PRIOR:
OnVScroll(SB_PAGEUP,0,NULL);
break;
case VK_NEXT:
OnVScroll(SB_PAGEDOWN,0,NULL);
break;
default:
return FALSE; // not for us
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -