滚动条的创建(1)

手动创建滚动条的一些API函数:

1.构造函数

CScrollBar()

例如:

CScrollBar *pScrollBar;

pScrollBar = new CScrollBar;

2.生成函数

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

 dwStyle参数可以是以上风格中某几个的组合,另外一般也会用到WS_CHILD、WS_VISIBLE风格。例如,创建一个水平滚动条控件,dwStyle参数应该为WS_CHILD|WS_VISIBLE|SBS_HORZ,创建垂直滚动条控件时dwStyle参数应该为WS_CHILD|WS_VISIBLE|SBS_VERT。

例如:

CRect rect(10,10,50,20);

pScrollBar->Create(SBS_VERT,rect,this,1000);

3.得到滚动条方块的当前的位置

int GetScrollPos( ) const;

例如:

int nPos = pScrollBar->GetScrollPos();

4.设置滚动条方块的当前位置

int SetScrollPos( int nPos, BOOL bRedraw = TRUE );

例如:

pScrollBar->SetScrollPos(5);

5.得到当前的滚动范围

void GetScrollRange( LPINT lpMinPos, LPINT lpMaxPos ) const;

例如:

int nMin,nMax;

pScrollBar->GetScrollRange(&nMin,&nMax);

6.设置当前的滚动范围

void SetScrollRange( int nMinPos, int nMaxPos, BOOL bRedraw = TRUE );

例如:

pScrollBar->SetScrollRange(0,10,TRUE);

7.显示滚动条

void ShowScrollBar( BOOL bShow = TRUE );

例如:pScrollBar->ShowScrollBar(FALSE);

8.禁用滚动条

BOOL EnableScrollBar( UINT nArrowFlags = ESB_ENABLE_BOTH );

例如:

pScrollBar->EnableScrollBar(ESB_DISABLE_RTDN);

9.设置当前滚动条信息

BOOL SetScrollInfo( LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE );

例如:

SCROLLINFO sbinfo;

sbinfo.fMask = SIF_ALL;

sbinfo.nMax = 20;

sbinfo.nMin = 0;

sbinfo.nPage = 8;

sbinfo.nPos = 17;

pScrollBar->SetScrollInfo(&sbinfo,TRUE);

10.获取当前滚动条信息

BOOL GetScrollInfo( LPSCROLLINFO lpScrollInfo, UINT nMask );

例如:

SCROLLINFO sbinfo;

pScrollBar->GetScrollInfo(&sbinfo);

<span style="font-size:10px;">typedef struct tagSCROLLINFO {    
    UINT cbSize;         // 结构的尺寸(字节为单位)    
    UINT fMask;          // 说明结构中的哪些参数是有效的,可以是屏蔽值的组合,如SIF_POS|SIF_PAGE,若为SIF_ALL则整个结构都有效   
    int  nMin;           // 滚动范围最小值,当fMask 中包含SIF_RANGE 时有效  
    int  nMax;           // 滚动范围最大值,当fMask 中包含SIF_RANGE 时有效  
    UINT nPage;          // 页尺寸,用来确定比例滚动框的大小,当fMask中包含SIF_PAGE时有效   
    int  nPos;           // 滚动框的位置,当fMask 中包含SIF_POS 有效   
    int  nTrackPos;      // 滚动时滚动框的位置,当fMask 中包含SIF_TRACKPOS 时有效,该参数只能查询,不能设置,最好不要用该参数来查询拖动时滚动框的位置  </span><span style="font-size:18px;"> 
}   SCROLLINFO, *LPSCROLLINFO;    
typedef SCROLLINFO CONST *LPCSCROLLINFO;</span>
<pre name="code" class="cpp"><span style="font-size:12px;color:#33cc00;background-color: rgb(255, 255, 255);">一般设置如下:</span>
<span style="font-size:12px;color:#33cc00;background-color: rgb(255, 255, 255);">SCROLLINFO info;//配置滑块的一些信息! 注意是滑块的! 不是滚动条 是你拖动的那个小快快   
info.cbSize = sizeof(SCROLLINFO);  //固定!  本结构的大小      
info.fMask = SIF_ALL;  //一些属性    
info.nMin = 0;   //滑块所能到达的最小范围  
info.nMax = bm.bmHeight;//滑块所能到达的最大范围 假如是一个图像 则为图像的高度  
info.nPage = 10;//滑块的大小  
info.nPos = m_VScrollPos;//滑块的位置  </span>

 

11.获取当前滚动条允许的最大位置

int GetScrollLimit( );

例如:

int nMax = pScrollBar->GetScrollLimit();

     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:滚动结束


创建过程:

   CScrollBar* m_pScrollBar;
 m_pScrollBar = new CScrollBar;
    CRect rect;
    GetDlgItem(IDC_STATIC_ONE)->GetWindowRect(&rect);
    ScreenToClient(&rect);//获得相对于主窗体的坐标
    //rect.OffsetRect(CSize(25,25));//这里要是要移动的相对位置
    //GetDlgItem(IDC_IMG_NOTEPAD)->MoveWindow(rect);//移动到目标位置
    rect.left = rect.right-20;
    m_pScrollBar->Create(SBS_VERT,rect,this,IDC_SCROLLBAR);
    m_pScrollBar->SetScrollRange(1, 100);
    m_pScrollBar->SetScrollPos(20); 



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值