这个问题说起来简单,做起来难。
虽然说是WTL,但我想MFC应该没有太大差别。
关键点:ScrollWindow,MoveWindow。
首先看ScrollWnd。
class ScrollWnd : public CWindowImpl<ScrollWnd,CWindow> //MFC中直接继承CWnd,WTL的精髓就是模板
{
private:
const int LINE; //定义移动的距离
public:
BEGIN_MSG_MAP(ScrollWnd)
MSG_WM_VSCROLL(OnVScroll)
MSG_WM_HSCROLL(OnHScroll)
END_MSG_MAP()
public:
ScrollWnd() : LINE(12) { }
void OnVScroll(UINT nSBCode,UINT,CScrollBar)
{
SCROLLINFO sif = { sizeof(SCROLLINFO),SIF_ALL };
GetScrollInfo(SB_VERT,&sif);
int oldPos = sif.nPos;
switch(nSBCode)
{
case SB_TOP: sif.nPos = sif.nMin; break;
case SB_BOTTOM: sif.nPos = sif.nMax; break;
case SB_LINEUP: sif.nPos -= LINE; break;
case SB_LINEDOWN: sif.nPos += LINE; break;
case SB_PAGEUP: sif.nPos -= sif.nPage; break;
case SB_PAGEDOWN: sif.nPos += sif.nPage; break;
case SB_THUMBTRACK: sif.nPos = sif.nTrackPos; break;