操作滚动条(一)

操作滚动条(一)

汉字最好09.12.27

http://blog.csdn.net/stgsd/archive/2009/12/27/5083886.aspx

因为要写一个自定义组件,需要用滚动条,但是怎么关联滚动和显示呢?

在网上搜了很久,不是自定义浏览器的滚动条就是百度中

 " cbSize是结构大小,填sizeof(SCROLLINFO)
  fMask指定使用结构中哪些成员,不指定的就不使用
  可以是以下几个值的任意组合
  SIF_ALL
  SIF_DISABLENOSCROLL
  SIF_PAGE 复制滚动页码到由lpsi指向的SCROLLINFO结构的nPage成员中
  SIF_POS 复制滚动位置到由lpsi指向的SCROLLINFO结构的nPos成员中
  SIF_RANGE 复制滚动范围到由lpsi指向的SCROLLINFO结构的nMin和nMax成员中
  SIF_TRACKPOS 复制当前滚动盒跟踪位置到由nTrackPos指向的SCROLLINFO结构的nPage成员中
  在调用Getscrolllofo函数之前,设置SCROLLINFO结构中cbSize成员以标识结构大小,设置成员fMask以说明待找回的滚动条参数。在运行之前,函数复制结构中适当的成员所指定的参数。"

 在csdn和盒子提问也没回应,应该是这个问题太简单,不值得回.

还是自己动手,先看看memo是怎么处理的:

摆三个memo.memo1要有竖的滚动条

oldmsg:=memo1.WindowProc;

memo1.WindowProc:=mymsg;

在mymsg中拦截 WS_VScroll消息,

结论:

nmax是总行数-1,
npage是每页显示行数-1

npos是当前第一行行号

ntrackpos是移动块拖动的位置

npos和ntrackpos的最大值是nmax-npage+1

 

msg.wparamlo是滚动条动作

0是点上箭头,1是点下箭头,npos变化1,ntrackpos无效

2是点移动块上,3是移动块下,npos变化npage-1,ntrackpos无效

5是按下或拖动移动块,4是放开移动块,ntrackpos是移动目的地

6和7没收到过

8是滚动条动作结束,ntrackpos和npos值相等,只有直接操作滚动条时才收到这个消息.

 

msg.wparamhi也是pos值
但是其在0,1,2,3,8号消息中无效,而且最大是$ffff,基本没有用.

 

所以,我们必须在消息处理函数中处理ntrackpos和npos的变化

还要用setscrollinfo或setscrollpos通知系统*奇怪,98下居然两个都要用)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值