【SCROLLINFO】结构详解

转自:http://www.cnblogs.com/hanyonglu/archive/2011/04/20/2022620.html

SCROLLINFO结构详解

在刚开始使用SCROLLINFO结构时感觉很不顺手,尤其其中的成员fMask理解不太深刻,经过查询资料才理解一二。

 

  在使用滚动条功能时,如果要设置它的范围和位置可以用以前的函数,例如:SetScrollRange()、 SetScrollPos()、GetScrollRange()、GetScrollPos()等,但目前通常使用SetScrollInfo()与 GetScrollInfo(),使用这两个函数就要用到SCROLLINFO结构。 

  

  可以先定义一个SCROLLINFO结构变量si,用&si作为以上两个函数的参数。同BeginPaint()中的&ps、GetTextMetrics()中的&tm等,这些结构都是通过这些函数被填充各域或取得各域的值。BeginPaint是填充ps的各域的值,GetTextMetrics是取得tm结构各域的值,而 SetScrollInfo()与GetScrollInfo()分别填充和取得。

  

  无论是Set还是Get,都得先设置si结构的第一个域的值,即赋给cbSize结构的大小。之后根据设置的fMask域的值进行Set或Get,当Set时,需要根据fMask的值将相关的域填充后再调用 SetScrollInfo(),这样si结构就被Set成功。当Get时,直接调用GetScrollInfo(),具体能使用哪些域的值是根据所设置的fMask域的值定的。

 

  如果要设置滚动条的范围和页面大小时,可编写以下代码:


      si.cbSize = sizeof (SCROLLINFO) ; 
      si.cbMask = SIF_RANGE | SIF_PAGE ; 
      si.nMin = 0 ; 
      si.nMax = NUMLINES - 1 ; 
      si.nPage = cyClient / cyChar ; 
      SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;

    而若要用到滚动条的位置时,可以这样使用:
    先si.cbSize = sizeof (si) ; 
    si.fMask = SIF_ALL ; // 表示Get后将使用si结构的位置、页面大小等量
    GetScrollInfo (hwnd, SB_VERT, &si)

  然后就可直接使用si.nPos、si.nPage、si.nTrackPos等量,这些量就是从si结构中通过Get函数获得的,

 

  Platform SDK中如下描述:

成员说明:
cbSize: SCROLLINFO结构长度字节数,该值在设置和查询参数时都必须填写。
fMask: 指定结构中的哪些成员是有效,该值共有如下5种选择,可以选择多种用“OR”组合起来,该值在

设置和查询参数时都必须填写。
SIF_ALL      :整个结构都有效
SIF_DISABLENOSCROLL:该值仅在设定参数时使用,视控件参数设定的需要来对本结构的成员进行取舍。
SIF_PAGE      :nPage成员有效
SIF_POS      :nPos成员有效
SIF_RANGE     :nMin和nMax成员有效
nMin:滚动范围最小值
nMax:滚动范围最大值
nPage:页尺寸,用来确定比例滚动框的大小
nPos:滚动框的位置
nTrackPos:拖动时滚动框的位置,该参数只能查询,不能设置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在VB6.0中,多行文本的滚动条背景颜色可以使用API函数来改变。可以使用SendMessage函数发送消息给多行文本控件,以改变滚动条的背景颜色。 以下是示例代码: ```vb Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const EM_GETSCROLLBAR = &HB4 Private Const SB_CTL = &H2 Private Const SIF_ALL = &H17 Private Type SCROLLINFO cbSize As Long fMask As Long nMin As Long nMax As Long nPage As Long nPos As Long nTrackPos As Long End Type Private Sub ChangeScrollBarBackColor(txtBox As TextBox) Dim scrollInfo As SCROLLINFO scrollInfo.cbSize = Len(scrollInfo) scrollInfo.fMask = SIF_ALL '获取垂直滚动条句柄 Dim vScrollBarHwnd As Long vScrollBarHwnd = SendMessage(txtBox.hWnd, EM_GETSCROLLBAR, SB_CTL, ByVal 0&) '获取水平滚动条句柄 Dim hScrollBarHwnd As Long hScrollBarHwnd = SendMessage(txtBox.hWnd, EM_GETSCROLLBAR, SB_CTL + 1, ByVal 0&) '设置垂直滚动条背景颜色 SetScrollInfo vScrollBarHwnd, SIF_ALL, scrollInfo, True SendMessage vScrollBarHwnd, &HB, 0, ByVal GetSysColor(COLOR_BTNFACE) '设置水平滚动条背景颜色 SetScrollInfo hScrollBarHwnd, SIF_ALL, scrollInfo, True SendMessage hScrollBarHwnd, &HB, 0, ByVal GetSysColor(COLOR_BTNFACE) End Sub Private Sub Form_Load() ChangeScrollBarBackColor Text1 End Sub ``` 在上面的代码中,我们定义了一个名为`ChangeScrollBarBackColor`的子过程,它接受一个多行文本控件作为参数。该子过程使用API函数获取垂直和水平滚动条的句柄,并使用SendMessage函数将背景颜色设置为系统按钮的背景颜色。 在Form_Load事件中,我们调用`ChangeScrollBarBackColor`子过程,并将多行文本控件`Text1`作为参数传递给它。 注意:使用API函数可能会导致不兼容的问题。因此,建议在使用之前备份您的代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值