win32 中关于ScrollWindow函数的应用

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 21:20   34   0

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是由


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP