读书笔记 - Windows程序设计(滚动条)

来源:互联网 发布:高性能笔记本 编程 编辑:程序博客网 时间:2024/06/07 03:14

1.滚动条的产生

创建窗口时,在窗口风格标识符包括 WS_VSCROLL 或者 WS_HSCROLL, 就会出现滚动条。hwnd = CreateWindow (szAppName, TEXT ("标题"),                    WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL,                    CW_USEDEFAULT, CW_USEDEFAULT,                    CW_USEDEFAULT, CW_USEDEFAULT,                    NULL, NULL, hInstance, NULL) ;WS_VSCROLL 垂直滚动条WS_HSCROLL 水平滚动条

2.滚动条消息

LRESULT CALLBACK WindowProc(                  HWND hwnd,       // handle to window                  UINT uMsg,       // WM_VSCROLL | WS_HSCROLL                  WPARAM wParam,   // request and position                  LPARAM lParam    // handle to scroll bar (HWND));wParam low-order    保存用户行为       high-order   保存当前的位置,如果低阶的行为不是                      SB_THUMBPOSITION or SB_THUMBTRACK,那么就不用理会WM_VSCROLL 垂直滚动条消息        switch(LOWORD(wParam))        {           case SB_BOTTOM:         //滚到底        case SB_LINEUP:         //向上滚动一行        case SB_LINEDOWN:       //向下滚动一行        case SB_PAGEUP:         //向上滚动一页        case SB_PAGEDOWN:       //向下滚动一页        case SB_THUMBTRACK:     //拖动滚动条        case SB_TOP:            //滚到顶        }WS_HSCROLL 水平滚动条消息        switch(LOWORD(wParam))        {           case SB_ENDSCROLL:      //滚动结束        case SB_LINELEFT:       //向左滚动一行        case SB_LINERIGHT:      //向右滚动一行        case SB_PAGELEFT:       //向左滚动一页        case SB_PAGERIGHT:      //向右滚动一页        case SB_THUMBPOSITION:  //拖动滚动条         }

3.滚动条API

//结构体参数typedef struct tagSCROLLINFO {     UINT cbSize;                    //设为 sizeof(SCROLLINFO)    UINT fMask;                     //要设置或者获取的值    int  nMin;                      //范围最小值    int  nMax;                      //范围最大值    UINT nPage;                     //页面大小    int  nPos;                      //当前位置    int  nTrackPos;                 //当前追随位置}   SCROLLINFO, *LPSCROLLINFO; typedef SCROLLINFO CONST *LPCSCROLLINFO;fMask    SIF_ALL         包括SIF_PAGE, SIF_POS, SIF_RANGE, and SIF_TRACKPOS.    SIF_PAGE        可用于指定或获取页面大小    SIF_POS         可用于指定或获取滑块条当前位置    SIF_RANGE       可用于指定或获取滑块条minmax 范围    SIF_TRACKPOS    在SetScrollInfo 中被忽略

//SetScrollInfo 可以设置滚动条的                 包括最小和最大滚动位置,                页面大小,                滚动条的位置int SetScrollInfo(                  HWND hwnd,           // 窗口句柄                  int fnBar,           // SB_HORZ 或 SB_VERT                  LPCSCROLLINFO lpsi,  // 结构体                  BOOL fRedraw         // 是否重绘                  );//调用例子//设置垂直滑块条范围跟滑块条大小        SCROLLINFO  si ;        si.cbSize = sizeof(si);             //结构体大小,微软用来判断API版本,因为有的时候版本参数不一样        si.fMask = SIF_PAGE | SIF_RANGE;    //操作行为 设置页面 跟 范围        si.nMin = 0;                        //最小范围        si.nMax = 100;                      //最大范围        si.nPage = 50;                      //页面大小        SetScrollInfo(hwnd, SB_HORZ, &si, TRUE);//设置垂直滑块条位置        SCROLLINFO  si ;        si.cbSize = sizeof(si);        si.fMask = SIF_POS;                 //操作行为 设置滑块条位置        si.nPos  = 100;                     //位置        SetScrollInfo(hwnd, SB_VERT, &si, TRUE);

//GetScrollInfo 可以获取滚动条的                 包括最小和最大滚动位置,                页面大小,                滚动条的位置  BOOL GetScrollInfo(  HWND hwnd,         // 窗口句柄                     int fnBar,         // SB_HORZ 或 SB_VERT                     LPSCROLLINFO lpsi  // 结构体                     );         //调用例子//获取滑块条所有信息        SCROLLINFO  si ;                si.cbSize = sizeof(si);        si.fMask = SIF_ALL;                 //获取滑块条所有信息        GetScrollInfo(hwnd, SB_VERT, &si);
//滚动窗口BOOL ScrollWindow(  HWND hWnd,              // 窗口句柄                    int XAmount,            // 滚动x位置                    int YAmount,            // 滚动y位置                    CONST RECT *lpRect,     // 指定滚动区域,为NULL客户区整体滚动                    CONST RECT *lpClipRect  // clipping rectangle                  );
0 0
原创粉丝点击