win32 中关于ScrollWindow函数的应用

本文介绍了SetScrollInfo函数如何自动调整滚动条的最大范围,并详细解析了ScrollWindow函数的工作原理,包括如何移动显示区域内的像素及设置无效区域来触发刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.SetScrollInfo 函数的说明:


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);

 

这个时候Windows会把最大的滚动条范围限制为 

si.nMax - si.nPage + 1

 

而不是NUMLINES-1。这样以来就很方便了。像前面说的那样,假设NUMLINES等于75,那么最后滚动条的最大范围是74-50+1,也就是25了。这正是我们想要的。这些都是系统自动设置的。虽然上面的代码中si.nMax被设置为NUMLINES-1,但是系统会自动把它设置成si.nMax - si.nPage + 1。


2  

BOOL ScrollWindow(
  HWND hWnd,              // handle to window
  int XAmount,            // horizontal scrolling
  int YAmount,            // vertical scrolling
  CONST RECT *lpRect,     // client area
  CONST RECT *lpClipRect  // clipping rectangle
);

ScrollWindow的操作是根据参数的滚动范围 算出 不会滚出显示区域的矩形,对这部分像素直接BitBlt到新的合适位置,对于滚动出现的新的矩形,擦除背景,设该矩形为无效区域

窗口有无效区域会触发WM_PAINT,新的区域也会很及时的刷新

ScrollWindow做了两件事情:
                       1、bitblt部分像素到指定区域。2、设置无效区域。


比如说客户端只能显示100行的数据。本来显示的是1~100行,向上移动20行的距离后要显示的数据是21~120行,21-100行直接通过Bitblt赋值到前80行的位置,设置后面的20行为无效区域,由用户完成绘制。




BOOL ScrollWindow(
  HWND hWnd,              // handle to window
  int XAmount,            // horizontal scrolling
  int YAmount,            // vertical scrolling
  CONST RECT *lpRect,     // client area
  CONST RECT *lpClipRect  // clipping rectangle
);


卷动范围是由lpRect确定的,但是lpClipRect是由


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值