第四章 4-3 滚动条

来源:互联网 发布:在淘宝上如何做代理 编辑:程序博客网 时间:2024/05/22 10:23

本文以垂直滚动轴为例,对滚动条的设置进行总结

1,在创建窗口函数的地方添加滚动条参数

HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW|WS_VSCROLL,      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

WS_VSCROLL 表示垂直滚动条
WS_HSCROLL 表示水平滚动条

2,窗口的尺寸改变是对参数进行相应的更改

case WM_SIZE:        cyClient = HIWORD(lParam);//客户区的高度在lParam的高位置        break;

3,创建窗口时对滚动条的位置进行设定

case WM_CREATE:        hdc = GetDC(hWnd);        GetTextMetrics(hdc, &tm);        iVscrollPos = 0;        SetScrollRange(hWnd, SB_VERT, 0, MAX_LINE - 1, FALSE);        SetScrollPos(hWnd, SB_VERT, 0, TRUE);        ReleaseDC(hWnd, hdc);        break;

SetScrollRange() 设定滚动条的范围
SetScrollPos() 设定滚动条的位置

4,对滚动条消息的设置

case WM_VSCROLL:        switch (LOWORD(wParam))//在wParam的低位置        {        case SB_LINEDOWN:            iVscrollPos += 1;            break;        case SB_LINEUP:            iVscrollPos -= 1;            break;        case SB_PAGEDOWN:            iVscrollPos += cyClient / cyChar;            break;        case SB_PAGEUP:            iVscrollPos -= cyClient / cyChar;            break;        case SB_THUMBPOSITION://点击滚动条滑动            iVscrollPos = HIWORD(wParam);            break;        default:            break;        }        iVscrollPos = max(0, min(iVscrollPos,MAX_LINE-1));//对滚动条的范围进行限定        if (iVscrollPos != GetScrollPos(hWnd,SB_VERT))        {        SetScrollPos(hWnd, SB_VERT, iVscrollPos, TRUE);        InvalidateRect(hWnd, NULL, TRUE);//对客户区失效让其重画        }        break;

5,对文本进行移动

for (int i = 0; i <= MAX_LINE; ++i){                   x = 0;                y = cyChar*(i - iVscrollPos);//对y轴的坐标进行变动,使其整体向上移动                iLong = wsprintf(szBuffer, TEXT("Hello %d"), i+1);                TextOut(hdc, x, y, szBuffer, lstrlen(szBuffer));            }
0 0
原创粉丝点击