BOOL SetScrollInfo( LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE );
该函数用于设置滚动条的各种状态,一个重要用途是设定页尺寸从而实现比例滚动框.参数lpScrollInfo指向一个SCROLLINFO结构,参数bRedraw表示是否需要重绘滚动条,如果为TRUE,则重绘之.若操作成功,该函数返回TRUE,否则返回FALSE.
CWnd类也提供了一些函数来查询和设置所属的标准滚动条.这些函数与CScrollBar类的函数同名,且功能相同,但每个函数都多了一个参数,用来选择滚动条.例如,CWnd:: GetScrollPos 的声明为
int GetScrollPos( int nBar ) const;
参数nBar用来选择滚动条,可以为下列值:
SB_HORZ //指定水平滚动条
SB_VERT //指定垂直滚动条
无论是标准滚动条,还是滚动条控件,滚动条的通知消息都是用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是通知消息码,如表6.8所示.nPos是滚动框的位置,只有在nSBCode为SB_THUMBPOSITION或SB_THUMBTRACK时,该参数才有意义.如果通知消息是滚动条控件发来的,那么pScrollBar是指向该控件的指针,如果是标准滚动条发来的,则pScrollBar为NULL.
表6.8 滚动条的通知消息码
消息
含义
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
滚动结束.
6.1.8小节的例子中,读者将学会如何使用滚动条以及如何编写自己的OnHScroll函数.
6.1.6 列表框控件
列表框主要用于输入,它允许用户从所列出的表项中进行单项或多项选择,被选择的项呈高亮度显示.列表框具有边框,并且一般带有一个垂直滚动条.列表框分单选列表框和多重选择列表框两种.单选列表框一次只能选择一个列表项,而多重选择列表框可以进行多重选择.对于列表项的选择,