我有一个所有者绘制的列表框,我想在其中绘制一些进展动画。到目前为止我所得到的一张照片将说明我相信的很多:
将每个文件放在DRAG HERE区域时添加到列表框中,在该区域创建新线程并启动加密/解密过程。 enc / dec过程将进度值(百分比)保存到给定的变量,即完成了多少工作 随着进度的增长,我正在重新绘制列表框。
if(progress - prevProgress > 1.0)
{
InvalidateRect(Listbox, &ListboxProgressRect, TRUE);
UpdateWindow(Listbox);
prevProgress = progress;
}
问题是每个项目都会重新绘制,即使只有一个项目需要重新绘制。 ListboxProgressRect
区域实际上包含列表框最右边40个像素的列表框高度
我想完全在带有子类Ctrl的WM_PAINT中处理绘图,但我不知道如何绘制项目和滚动条功能。 进度条旁边的编辑框和按钮也很不错。
我应该将列表框子类化并处理所有绘图吗?如果是这样,我如何绘制滚动条(并使其工作)?
答案 0 :(得分:3)
答案 1 :(得分:1)
有多少线程可以处理你的列表框?我想使用它们是个坏主意。最好为整个列表框使用一个计时器来检查每个可见元素的状态,并检查它是否必须重绘。使用InvalidateRect强制WM_PAINT重绘列表。
线程只会使代码复杂化。
要避免处理绘图scrobars,不要子类列表,而是创建一个onwerdrawn列表框,它是灵活的,并处理滚动平滑。