您的位置:首页 > 其它

win32 中关于ScrollWindow函数的应用

2015-05-02 12:45 190 查看
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是由
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: