第四章 4-4 滚动条的升级版

来源:互联网 发布:时空智友软件 编辑:程序博客网 时间:2024/06/14 06:27

1,在窗口尺寸改变是对滚动条的进行重构

SCROLLINFO  si;//新结构case WM_SIZE:        cyClient = HIWORD(lParam);        si.cbSize = sizeof(si);//字节数        si.fMask = SIF_RANGE | SIF_PAGE;//限定滚动条的范围和函数        si.nPage = cyClient / cyChar;        si.nMin = 0;        si.nMax = NUMLINES - 1;        SetScrollInfo(hWnd, SB_VERT, &si, TRUE);通过设定页面的大小的改变从而改变滚动条的大小        break;

2,滚动条信息的设定

case WM_VSCROLL:        si.cbSize = sizeof(si);        si.fMask = SIF_ALL;        GetScrollInfo(hWnd, SB_VERT, &si);        iVertPos = si.nPos;        switch (LOWORD(wParam))        {        case SB_LINEDOWN:            si.nPos += 1;            break;        case SB_LINEUP:            si.nPos -= 1;            break;        case SB_PAGEDOWN:            si.nPos += si.nPage;            break;        case SB_PAGEUP:            si.nPos -= si.nPage;            break;        case SB_THUMBPOSITION:            si.nPos = si.nTrackPos;            break;        default:            break;        }        si.fMask = SIF_POS;        SetScrollInfo(hWnd, SB_VERT, &si, TRUE);//设置新的位置点        GetScrollInfo(hWnd, SB_VERT, &si);//获取滚动条的信息        if (si.nPos != iVertPos)        {            ScrollWindow(hWnd, 0, cyChar*(iVertPos - si.nPos), NULL, NULL);//对窗口的区域进行滑动            UpdateWindow(hWnd);        }        break;

3,绘图信息的重画

GetScrollInfo(hWnd, SB_VERT, &si);si.cbSize = sizeof(si);si.fMask = SIF_POS;iVertPos = si.nPos;//对重画的范围进行设定,仅仅对空缺的部分进行画iPaintBeg = max(0, iVertPos + ps.rcPaint.top / cyChar);iPaintEnd = min(NUMLINES - 1, iVertPos + ps.rcPaint.bottom);
0 0