VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 365|回复: 0

[交流] MFC ScrollBar滚动条的使用

[复制链接]
50_avatar_middle
最佳答案
0 
在线会员 发表于 2021-8-22 15:53:19 | 显示全部楼层 |阅读模式
众所周知 Syc没有讲滚动条如何使用
我来补充一下(本人小白,勿喷,话说我怎么灌水了)
0.拖一个滚动条(水平或者垂直都可以)
设置ID为IDC_HSCROLLBAR
给他添加一个变量(m_HScrollBar)

MFC ScrollBar滚动条的使用

1.获取/设置滚动条位置:
int GetScrollPos() const;
获取滚动条的当前位置。如果失败则返回0。

int SetScrollPos(int nPos, BOOL bRedraw = TRUE);
将滚动块移动到指定位置。参数nPos指定了滚动块的新位置,参数bRedraw表示是否需要重绘滚动条,如果为TRUE,则重绘。函数返回滚动框原来的位置,若操作失败则返回0.

  
2.获取/设置滚动条滚动范围:
void GetScrollRange(LPINT lpMinPos, LPINT lpMaxPos) const;
获取滚动条的滚动范围。参数lpMinPos指向滚动条滚动范围的最小值,参数lpMaxPos指向滚动条滚动范围的最大值。

void SetScrollRange(int nMinPos, int nMaxPos, BOOL bRedraw = TRUE);
用于指定滚动条的滚动范围。参数nMinPos和nMaxPos分别指定了滚动范围的最小值和最大值,两者的差不得超过32767。当两者都为0时,滚动条将被隐藏。参数bReadraw表示是否需要重绘滚动条,如果为TRUE,则重绘。

你发现滚动条不能用,因为你没添加消息函数

3.OnHScroll()与OnVScroll()函数
无论是标准滚动条,还是滚动条控件,滚动条的通知消息都是用WM_HSCROLL和WM_VSCROLL消息发送出去的。对这两个消息的默认处理函数是CWnd::OnHSCroll和CWnd::OnVScroll,一般要在派生类中对这两个函数进行重载,以实现滚动功能。也就是说,假设在一个对话框中放入了一个水平滚动条,我们可以在对话框类中重载OnHScroll函数,并在OnHScroll函数中实现滚动功能。
这两个函数的声明如下:
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。
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:滚动结束

4.滚动条的应用
放置一个编辑框,设置ID为:IDC_EDIT_HSCROOL
在类视图里右键想添加滚动条响应函数的类
然后在消息中添加WM_HSCROOL或WM_VSCROOL消息(我用的是WM_HSCROOL)
    int pos = m_ m_HScrollBar.GetScrollPos();

    switch (nSBCode)
    {
    // 如果向左滚动一列,则pos减1
    case SB_LINELEFT:
        pos -= 1;
        break;
    // 如果向右滚动一列,则pos加1
    case SB_LINERIGHT:
        pos += 1;
        break;
    // 如果向左滚动一页,则pos减10
    case SB_PAGELEFT:
        pos -= 10;
        break;
    // 如果向右滚动一页,则pos加10
    case SB_PAGERIGHT:
        pos += 10;
        break;
    // 如果滚动到最左端,则pos为1
    case SB_LEFT:
        pos = 1;
        break;
    // 如果滚动到最右端,则pos为100
    case SB_RIGHT:
        pos = 100;
        break;
    // 如果拖动滚动块到指定位置,则pos赋值为nPos的值
    case SB_THUMBPOSITION:
        pos = nPos;
        break;
    // 下面的m_horiScrollbar.SetScrollPos(pos);执行时
    // 会第二次进入此函数,最终确定滚动块位置,并且会
    // 直接到default分支,所以在此处设置编辑框中显示数值
    default:
        SetDlgItemInt(IDC_EDIT_HSCROOL, pos);
        return;
    }

    // 设置滚动块位置
    m_HScrollBar.SetScrollPos(pos);

MFC ScrollBar滚动条的使用

是不是编辑框的数字在跟着滚动条变化?

5.试试在不看代码的情况下写出垂直滚动条的应用!

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
58_avatar_small thzzl + 2 + 2 先评后看,本人习惯。

查看全部评分





上一篇:计算机专业必读书籍汇总!
下一篇:c语言学习之路的点滴记录--结构体的基本使用
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-11-30 02:34

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表