查看源代码 wxBufferedDC (wx v2.4.3)
这个类提供了一种避免闪烁的简单方法:当在其上绘制时,所有内容实际上首先绘制在内存中的缓冲区(一个 wxBitmap
)中,然后仅在销毁此对象时,使用相关的 wxDC
复制到屏幕上一次。
wxBufferedDC
本身通常与 wxClientDC
关联。如果您想在您的 EVT_PAINT
处理程序中使用它,您应该查看 wxBufferedPaintDC
。
像这样使用时,必须在构造函数中指定有效的 DC
,而 buffer
位图不必显式提供,默认情况下,此类将自行分配所需大小的位图。但是,使用专用位图可以通过消除重复创建和销毁可能很大的位图来加快重绘过程。否则,wxBufferedDC
可以像任何其他设备上下文一样使用。
wxBufferedDC
的另一种可能用途是使用它来维护窗口内容的后备存储。在这种情况下,关联的 DC
可以为 NULL,但应指定有效的后备存储位图。
最后,请注意,GTK+ 2.0 以及 macOS 本身原生提供双缓冲。您可以 使用 wxWindow:isDoubleBuffered/1
来确定是否需要使用缓冲,或使用 wxAutoBufferedPaintDC
(未在 wx 中实现)以避免在已经自动执行双缓冲的系统上进行不必要的双缓冲。
请参阅
此类派生自,并可以使用来自以下文档的函数:
wxWidgets 文档:wxBufferedDC
摘要
类型
-type wxBufferedDC() :: wx:wx_object().
函数
-spec destroy(This :: wxBufferedDC()) -> ok.
销毁对象
-spec init(This, Dc) -> ok when This :: wxBufferedDC(), Dc :: wxDC:wxDC().
等效于 init(This, Dc, [])
。
-spec init(This, Dc, Area) -> ok when This :: wxBufferedDC(), Dc :: wxDC:wxDC(), Area :: {W :: integer(), H :: integer()}; (This, Dc, [Option]) -> ok when This :: wxBufferedDC(), Dc :: wxDC:wxDC(), Option :: {buffer, wxBitmap:wxBitmap()} | {style, integer()}.
-spec init(This, Dc, Area, [Option]) -> ok when This :: wxBufferedDC(), Dc :: wxDC:wxDC(), Area :: {W :: integer(), H :: integer()}, Option :: {style, integer()}.
初始化使用默认构造函数创建的对象。
请参阅构造函数以了解参数详细信息。
-spec new() -> wxBufferedDC().
默认构造函数。
您必须稍后调用其中一个 init/4
方法才能使用设备上下文。
-spec new(Dc) -> wxBufferedDC() when Dc :: wxDC:wxDC().
等效于 new(Dc, [])
。
-spec new(Dc, Area) -> wxBufferedDC() when Dc :: wxDC:wxDC(), Area :: {W :: integer(), H :: integer()}; (Dc, [Option]) -> wxBufferedDC() when Dc :: wxDC:wxDC(), Option :: {buffer, wxBitmap:wxBitmap()} | {style, integer()}.
为提供的 dc 创建缓冲区。
使用此构造函数时,不能调用 init/4
。
-spec new(Dc, Area, [Option]) -> wxBufferedDC() when Dc :: wxDC:wxDC(), Area :: {W :: integer(), H :: integer()}, Option :: {style, integer()}.
为提供的 dc
创建缓冲区。
使用此构造函数时,不能调用 init/4
。