新建一个Hello.h头文件
代码如下:
class CMyApp :public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CMainWindow :public CFrameWnd
{
public:
CMainWindow();
protected:
//声明消息映射
DECLARE_MESSAGE_MAP();
afx_msg void OnPaint();
protected:
int m_nVScrollPos;//滚动条的位置
int m_nViewHeight;//数据的高度
int m_nVPageSize; //页面的大小
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
};
新建一个Hello.cpp头文件
代码如下:
#include"hello.h"
#define MAXLINE 100
#define LINESIZE 17
CMyApp myApp;
BOOL CMyApp::InitInstance()
{
this->m_pMainWnd = new CMainWindow();
this->m_pMainWnd->ShowWindow(this->m_nCmdShow);
this->m_pMainWnd->UpdateWindow();
return TRUE;
}
BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
ON_WM_PAINT()
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_VSCROLL()
END_MESSAGE_MAP()
CMainWindow::CMainWindow()
{
this->Create(NULL, TEXT("the Hello Application"),WS_OVERLAPPEDWINDOW|WS_VSCROLL);
}
void CMainWindow::OnPaint()
{
CPaintDC dc(this);
dc.SetWindowOrg(0, m_nVScrollPos);
TCHAR szBuffer[1024];
for (int i = 0; i < MAXLINE; ++i)
{
_sntprintf(szBuffer, 1024, TEXT("Hello %d"), i);
dc.TextOutW(0, i * LINESIZE, szBuffer, lstrlen(szBuffer));
}
}
int CMainWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
m_nViewHeight = LINESIZE * MAXLINE;
m_nVScrollPos = 0;
return 0;
}
void CMainWindow::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
int nVScrollMax = 0;
// TODO: 在此处添加消息处理程序代码
m_nVPageSize = 0;
if (cy < m_nViewHeight)
{
nVScrollMax = m_nViewHeight - 1;
m_nVPageSize = cy;
m_nVScrollPos = min(m_nVScrollPos, m_nViewHeight - m_nVPageSize);
}
SCROLLINFO si;
si.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;
si.nMin = 0;
si.nMax = nVScrollMax;
si.nPos = m_nVScrollPos;
si.nPage = m_nVPageSize;
this->SetScrollInfo(SB_VERT, &si, TRUE);
}
//滚动条消息
void CMainWindow::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CFrameWnd::OnVScroll(nSBCode, nPos, pScrollBar);
int nDelta = 0;
switch (nSBCode)
{
case SB_LINEUP:
nDelta = -LINESIZE;
break;
case SB_PAGEUP:
nDelta = -m_nVPageSize;
break;
case SB_THUMBTRACK:
nDelta = (int)nPos - m_nVScrollPos;
break;
case SB_PAGEDOWN:
nDelta = m_nVPageSize;
break;
case SB_LINEDOWN:
nDelta = LINESIZE;
break;
default:
return;
}
if (nDelta != 0)
{
m_nVScrollPos += nDelta;
SetScrollPos(SB_VERT, m_nVScrollPos, TRUE);
ScrollWindow(0, -nDelta);
}
}