duilib listUI滚动列表的时候回出现在LIst外面显示的情况
今天做的使用listui来查看数据发现的一个bug:当list控件的滚动条移动的时候,列表项只有一部分显示在list上面的时候剩余的一部分偶尔会显示到界外。
刚开始查看listui的时候,认为应该是setpos的时候,计算错误导致的问题。这么判断的依据是因为在移动滚动条的时候会产生刷新然后会引发重绘。然后就会引发setpos从而更新列表。但是跟进去的时候发现计算的全部是正确的。
既然计算都是正确的,那应该是在setpos之后又引发了更新。然后继续跟,发现之后会引发OnPaint操作,对所有的控件进行相应的更新。但是在OnPaint的时候发现了一个奇怪的情况每次调用OnPaint的时候进行绘制使用的是本身控件的RECT而不是本身控件的RECT跟本身控件所在区域的交集。所以传进去的pControl->DoPaint(hDC, rcPaint);应该修改成经过::IntersectRect(&rcTemp, &rc, &pControl->GetPos())计算完成的rcTemp而不是rcPaint。
所以使用OnPaint进行操作时的计算刷新区域失误而导致的一部分数据显示到外界。