GDI快速滚动

时间:2010-05-24 13:34:28

标签: winapi scroll gdi

我使用GDI创建一些自定义textwidget。我直接画到屏幕上,没有缓冲。

现在我想实现一些快速滚动,它只是像素移动帧缓冲区的相应部分(并且只重绘新的可见线条)。

我注意到,例如富文本控件就像这样。如果我使用一些GDI绘图函数直接绘制到帧缓冲区,通过富文本控件,然后滚动富文本,它还将滚动我的绘图与文本。所以我假设富文本只是像素移动它是帧缓冲区的一部分。

我想做同样的事,但不知道该怎么做。

有人可以帮忙吗? (独立于编程语言))

谢谢!

2 个答案:

答案 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。