我使用GDI创建一些自定义textwidget。我直接画到屏幕上,没有缓冲。
现在我想实现一些快速滚动,它只是像素移动帧缓冲区的相应部分(并且只重绘新的可见线条)。
我注意到,例如富文本控件就像这样。如果我使用一些GDI绘图函数直接绘制到帧缓冲区,通过富文本控件,然后滚动富文本,它还将滚动我的绘图与文本。所以我假设富文本只是像素移动它是帧缓冲区的一部分。
我想做同样的事,但不知道该怎么做。
有人可以帮忙吗? (独立于编程语言))
谢谢!
答案 0 :(得分:8)
ScrollWindowEx() API函数已针对此进行了优化。
答案 1 :(得分:2)
请参阅BitBlt功能:
BitBlt函数执行 位块传输颜色数据 对应于像素矩形 来自指定的源设备 上下文到目标设备 上下文。
以及文档末尾的示例:Capturing an Image:
您可以使用位图来捕获 图像,您可以存储捕获的 内存中的图像,显示在a 在你的不同位置 应用程序的窗口。 [...] 在某些情况下,你可能想要你的 应用程序捕获图像和 暂时存储它们。 [...] 至 临时存储图像,你的 申请必须打电话 CreateCompatibleDC创建一个DC 与当前窗口兼容 DC。创建兼容的DC后, 你用它创建一个位图 适当的尺寸通过调用 CreateCompatibleBitmap函数和 然后选择它进入此设备 上下文通过调用SelectObject 功能
兼容设备上下文之后 创建和适当的位图 被选中,你可以捕捉 图片。 BitBlt函数 捕获图像。这个功能 执行位块传输,即 它从源位图复制数据 到目标位图。 [...] 要重新显示图像,请调用BitBlt a 第二次,指定兼容 DC作为源DC和窗口DC作为 目标DC。