zoukankan      html  css  js  c++  java
  • MFC常用控件之滚动条

    近期学习了鸡啄米大神的博客,对其中的一些知识点做了一些自己的总结。不过,博客内容大部分来自鸡啄米。因此,这个博客算是转载博客,只是加了一些我自己的理解而已。若想学习鸡啄米大神的博客总结,请点击连接:http://www.jizhuomi.com/software/257.html

    1.滚动条分为水平滚动条(Horizontal Scroll Bar)和垂直滚动条(Vertical Scroll Bar)两种.  MFC也为滚动条控件的操作提供了类,即为CScrollBar类。像列表框和组合框设置了WS_HSCROLL 或WS_VSCROLL风格以后出现的滚动条,不是一个独立的窗口,而是这些窗口的一部分,这就是标准滚动条。而滚动条控件是一个独立的窗口,它可以获得焦点,响应某些操作。

    2.创建滚动条:
    virtual BOOL Create(
       DWORD dwStyle,
       const RECT& rect,
       CWnd* pParentWnd,
       UINT nID
    );
    下面针对dwStyle参数进行详细讲解:
        SBS_HORZ:指定滚动条为水平滚动条。如果没有指定SBS_BOTTOMALIGN或SBS_TOPALIGN风格,则滚动条的高度、宽度和位置由Create函数的rect参数给出。
        SBS_VERT:指定滚动条为垂直滚动条。如果没有指定SBS_RIGHTALIGN或SBS_LEFTALIGN风格,则滚动条的高度、宽度和位置由Create函数的rect参数给出。
        SBS_TOPALIGN:与SBS_HORZ配合使用。滚动条的上边缘与Create函数的rect参数指定矩形的上边缘对齐。滚动条高度为系统滚动条的默认高度。
        SBS_BOTTOMALIGN:与SBS_HORZ配合使用。滚动条的下边缘与Create函数的rect参数指定矩形的下边缘对齐。滚动条高度为系统滚动条的默认高度。
        SBS_LEFTALIGN:与SBS_VERT配合使用。滚动条的左边缘与Create函数的rect参数指定矩形的左边缘对齐。滚动条宽度为系统滚动条的默认宽度。
        SBS_RIGHTALIGN:与SBS_VERT配合使用。滚动条的右边缘与Create函数的rect参数指定矩形的右边缘对齐。滚动条宽度为系统滚动条的默认宽度。
        dwStyle参数可以是以上风格中某几个的组合,另外一般也会用到WS_CHILD、WS_VISIBLE风格。

    3.获取滚动条参数信息函数:BOOL GetScrollInfo(LPSCROLLINFO lpScrollInfo, UINT nMask = SIF_ALL);
    获取的滚动条的参数信息,该信息为SCROLLINFO结构体的形式。参数lpScrollInfo为指向SCROLLINFO结构体变量的指针。

     1     typedef struct tagSCROLLINFO {    
     2         UINT cbSize;         // 结构的尺寸(字节为单位)   
     3         UINT fMask;          // 说明结构中的哪些参数是有效的,可以是屏蔽值的组合,如SIF_POS|SIF_PAGE,若为SIF_ALL则整个结构都有效   
     4         int  nMin;           // 滚动范围最小值,当fMask 中包含SIF_RANGE 时有效   
     5         int  nMax;           // 滚动范围最大值,当fMask 中包含SIF_RANGE 时有效   
     6         UINT nPage;          // 页尺寸,用来确定比例滚动框的大小,当fMask中包含SIF_PAGE时有效   
     7         int  nPos;           // 滚动框的位置,当fMask 中包含SIF_POS 有效   
     8         int  nTrackPos;      // 滚动时滚动框的位置,当fMask 中包含SIF_TRACKPOS 时有效,该参数只能查询,不能设置,最好不要用该参数来查询拖动时滚动框的位置   
     9     }   SCROLLINFO, *LPSCROLLINFO;    
    10     typedef SCROLLINFO CONST *LPCSCROLLINFO;  
    View Code

    4.设置滚动条参数信息:BOOL SetScrollInfo(LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE);参数bRedraw表示是否需要重绘滚动条,如果为TRUE,则重绘。

    5.获取滚动条位置: int GetScrollPos()const;

    6.将滚动块移动到指定位置:int SetScrollPos(int nPos, BOOL bRedraw = TRUE);

    7.获取滚动条的滚动范围:void GetScrollRange(LPINT lpMinPos, LPINT lpMaxPos) const;

    6.消息处理函数:滚动条的通知消息都是用WM_HSCROLL 和WM_VSCROLL消息发送出去的。对这两个消息的默认处理函数是CWnd::OnHScroll和CWnd::OnVScroll,一般需要在派生类中对这两个函数进行重载,以实现滚动功能。函数声明如下:
        afx_msg void OnHScroll(UINT nSBCode,UINT nPos,CScrollBar* pScrollBar);
        afx_msg void OnVScroll(UINT nSBCode,UINT nPos,CScrollBar* pScrollBar);
        参数:
        nSBCode是通知消息码;nPos 是滚动框的位置,只有在nSBCode为SB_THUMBPOSITION或SB_THUMBTRACK时,该参数才有意义。如果通知消息是滚动条控件发来的,那么pScrollBar 是指向该控件的指针,如果是标准滚动条发来的,则pScrollBar 为NULL。
        滚动条消息通知码nSBCode:
           SB_BOTTOM/SB_RIGHT:滚动到底端(右端)
           SB_TOP/SB_LEFT:滚动到顶端(左端)
           SB_LINEDOWN/SB_LINERIGHT:向下(向右)滚动一行(列)
           SB_LINEUP/SB_LINELEFT:向上(向左)滚动一行(列)
           SB_PAGEDOWN/SB_PAGERIGHT:向下(向右)滚动一页
           SB_PAGEUP/SB_PAGELEFT:向上(向左)滚动一页
           SB_THUMBPOSITION:滚动到指定位置
           SB_THUMBTRACK:滚动框被拖动。可利用该消息来跟踪对滚动框的拖动
           SB_ENDSCROLL:滚动结束

    示例代码:

     1 创建滚动条:
     2 m_scrollBar.Create(WS_CHILD|WS_VISIBLE|SBS_HORZ,CRect(10,10,250,50),this,1136);
     3     m_scrollBar.SetScrollRange(1,100);
     4 
     5 滚动条响应事件:
     6 void CMFC_NoramlControlDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
     7 {
     8     
     9     static int pos=0;
    10     pos=m_scrollBar.GetScrollPos();
    11     switch(nSBCode)
    12     {
    13     case SB_THUMBPOSITION:
    14         pos=nPos+10;        
    15         break;
    16     case SB_THUMBTRACK:
    17         pos=nPos;
    18         break;
    19     case SB_LINELEFT:
    20         pos=nPos-5;
    21         break;
    22     case SB_PAGELEFT:
    23         pos=nPos-10;
    24         break;
    25     case SB_LINERIGHT:
    26         pos=nPos+5;
    27         break;
    28     case SB_PAGERIGHT:
    29         pos=nPos+10;
    30         break;
    31     }
    32     m_scrollBar.SetScrollPos(pos);
    33     CString strPos;
    34     strPos.Format("%d",pos);
    35     GetDlgItem(IDC_STATIC1)->SetWindowText(strPos);
    36     CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    37 }
    View Code

     

  • 相关阅读:
    承接小项目嵌入式linux相关开发、开源飞控相关开发、qt相关开发、无人机地面站相关开发
    转载 ardupilot 学习
    PX4 IO板启动流程
    PX4 FMU启动流程 1.nsh
    PX4 FMU启动流程 2. 一、 nsh_newconsole
    PX4 FMU启动流程 2. 二、 nsh_initscript
    Pixhawk源码快速阅读 02_进程间通信
    PX4 FMU [5] Loop
    Oracle 执行JOB程序自动存储数据
    C# 禁止非数字输入TextBoox
  • 原文地址:https://www.cnblogs.com/HPAHPA/p/7885759.html
Copyright © 2011-2022 走看看