檢視原始碼 wxBufferedDC (wx v2.4.3)
這個類別提供一種簡單的方法來避免閃爍:當在其上繪圖時,實際上所有內容首先繪製在記憶體中的緩衝區(一個 wxBitmap
)中,然後僅在物件銷毀時,才使用相關聯的 wxDC
複製到螢幕上一次。
如果想在 EVT_PAINT
處理常式中使用 wxBufferedDC
,它本身通常會與 wxClientDC
相關聯,那麼您應該查看 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
。