Scroll bar 的使用

1)  在对话框上加入scrollbar资源。并加入一个edit control资源,来检测bar的位置。

2)  scrollbar资源添加控制变量m_scrollbar,为edit control资源添加控制变量m_edit

3)  添加消息响应“OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)”。

4)  Dlg对话框的CbarDlg::OnInitDialog()中添加代码如下:

     m_scrollbar.SetScrollRange(0,20);

     m_scrollbar.SetScrollPos(10);

     char sPos[10];

     _itoa_s(m_scrollbar.GetScrollPos(),sPos,10);

     m_edit.SetSel(0,-1);

m_edit.ReplaceSel(sPos, FALSE);

 

5)   OnHScroll(……)函数中,添加如下代码:

     char sPos[10];

     int iNowPos;

     switch(nSBCode)                           //接收scrollbar的消息

     {

         if(pScrollBar==&m_scrollbar)         //找到相对应的scrollbar

         {

     case SB_THUMBTRACK:                       //滚动条拖动到某一位置,参数nPos指明当前位置

         m_scrollbar.SetScrollPos(nPos);

         _itoa_s(nPos,sPos,10);

         m_edit.SetSel(0,-1);

         m_edit.ReplaceSel(sPos);

     case SB_LINEDOWN:                         //向下滚动一行

         iNowPos=m_scrollbar.GetScrollPos();

         iNowPos++;

         if(iNowPos>20)

              iNowPos=20;

         m_scrollbar.SetScrollPos(iNowPos);

         _itoa_s(m_scrollbar.GetScrollPos(),sPos,10);

         m_edit.SetSel(0,-1);

         m_edit.ReplaceSel(sPos);

         break;

     case SB_LINEUP:                           //向上滚动一行

         iNowPos=m_scrollbar.GetScrollPos();

         iNowPos--;

         if(iNowPos<0)

              iNowPos=0;

         m_scrollbar.SetScrollPos(iNowPos);

         _itoa_s(m_scrollbar.GetScrollPos(),sPos,10);

         m_edit.SetSel(0,-1);

         m_edit.ReplaceSel(sPos);

         break;

     case SB_PAGEDOWN:                         //向下滚动一页

         iNowPos=m_scrollbar.GetScrollPos();

         iNowPos+=3;

         if(iNowPos>20)

              iNowPos=20;

         m_scrollbar.SetScrollPos(iNowPos);

         _itoa_s(m_scrollbar.GetScrollPos(),sPos,10);

         m_edit.SetSel(0,-1);

         m_edit.ReplaceSel(sPos);

         break;

     case SB_PAGEUP:                           //向上滚动一页

         iNowPos=m_scrollbar.GetScrollPos();

         iNowPos-=3;

         if(iNowPos<0)

              iNowPos=0;

         m_scrollbar.SetScrollPos(iNowPos);

         _itoa_s(m_scrollbar.GetScrollPos(),sPos,10);

         m_edit.SetSel(0,-1);

         m_edit.ReplaceSel(sPos);

     //   m_edit.Clear();

         break;

         }

     }

 在创建滚动条后需要调用void SetScrollRange( int nMinPos, int nMaxPos, BOOL bRedraw = TRUE )设置滚动范围,

int GetScrollPos( )/int SetScrollPos( )
用来得到和设置当前滚动条的位置。

void ShowScrollBar( BOOL bShow = TRUE );
用来显示/隐藏滚动条。

BOOL EnableScrollBar( UINT nArrowFlags = ESB_ENABLE_BOTH )
用来设置滚动条上箭头是否为允许状态。nArrowFlags可取以下值:

ESB_ENABLE_BOTH
两个箭头都为允许状态
ESB_DISABLE_LTUP
/左箭头为禁止状态
ESB_DISABLE_RTDN
/右箭头为禁止状态
ESB_DISABLE_BOTH
两个箭头都为禁止状态


如果需要在滚动条位置被改变时得到通知,需要在父窗口中定义对消息WM_VSCROLL/WM_HSCROLL的映射。方法为在父窗口类中重载afx_msg void OnVScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar )/afx_msg void OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar ) 所使用的消息映射宏为:ON_WM_VSCROLL( ),ON_WM_HSCROLL( ),在映射宏中不需要指明滚动条的ID,因为所有滚动条的滚动消息都由同样的函数处理。在OnHScroll/OnVScroll的第三个参数会指明当前滚动条的指针。第一个参数表示滚动条上发生的动作,可取以下值:
SB_TOP/SB_BOTTOM
已滚动到顶/底部
SB_LINEUP/SB_LINEDOWN
向上/下滚动一行
SB_PAGEDOWN/SB_PAGEUP
向上/下滚动一页
SB_THUMBPOS
ITION/SB_THUMBTRACK
滚动条拖动到某一位置,参数nPos指明当前位置(参数nPos在其它的情况下是无效的)
SB_ENDSCROLL
滚动条拖动完成

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值