滚动条处理笔记

提示:看看原代码会明白下面所说的!
原代码
处理滚动条时的问题:
有了WS_VSCROLL后会出现滚动条,但是无法滚动,还没有键盘接口,也没有初始化滚动块的大小等等

我们要做的事情是:
1.要处理滚动消息
2.移动滚动块到鼠标指定的位置
3.并更新客户区的内容


滚动消息:
WM_VSCROLL
nScrollCode = (int) LOWORD(wParam); // scroll bar value
nPos = (short int) HIWORD(wParam);  // scroll box position
hwndScrollBar = (HWND) lParam;      // handle to scroll bar

他告诉我们,用户对滚动条的行为(nScrollCode)和滚动块的位置(nPos)以及滚动条的句柄
Mesage Cracker
void SysMets_OnVScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos)
{
}


滚动nScrollCode:
SB_LINEUP    点击向上小箭头
SB_PAGEDOWN  点击滚动块下面空白区域
SB_THUMBTRACK   移动滚动块

如何同步更新客户区的内容:
1.在处理滚动时要同时更新客户区的内容要产生WM_PAINT消息
InvalidateRect,ScrollWindow,RedraweWindow三者选一
2.考虑进滚动块的位置来定位客户区内容的显示位置

奇妙滚动的原理:
滚动时,要求客户区要重新绘制,当下滚动时,客户区向上滚动,定量是什么意思呢?
当滚动条位置为0时,显示第0行 坐标(0,0) 第1行坐标(0,1)
当滚动条位置向下移动一个单位时,显示第0行坐标(0,-1)---也就是看不见了,第1行坐标(0,0)--奇妙的向上

滚动了

所以为了要从基于0开始,就要在原来的坐标上减去滚动块的位置值
i-iVscrollPos

新滚动条函数
SetScrollInfo
GetScrollInfo
hwnd是有滚动条的父窗口,不是滚动条的hwnd
fMask表示你要取Scroll的什么信息 

滚动条最好的初始化的地方是WM_SIZE消息处

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值