---
name: "wxBufferedDC"
section: "3erl"
platform: "linux"
package: "erlang-manpages"
version: "1:25.2.3+dfsg-1+deb12u4"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/wxBufferedDC"
---

# wxBufferedDC(3erl)

Functions for wxBufferedDC class

## NAME

wxBufferedDC - Functions for wxBufferedDC class

## DESCRIPTION

This class provides a simple way to avoid flicker: when drawing on it, everything is in fact first drawn on an in-memory buffer (a *wxBitmap*) and then copied to the screen, using the associated *wxDC*, only once, when this object is destroyed. *wxBufferedDC* itself is typically associated with *wxClientDC*, if you want to use it in your *EVT\_PAINT* handler, you should look at *wxBufferedPaintDC* instead.

When used like this, a valid *DC* must be specified in the constructor while the *buffer* bitmap doesn't have to be explicitly provided, by default this class will allocate the bitmap of required size itself. However using a dedicated bitmap can speed up the redrawing process by eliminating the repeated creation and destruction of a possibly big bitmap. Otherwise, *wxBufferedDC* can be used in the same way as any other device context.

Another possible use for *wxBufferedDC* is to use it to maintain a backing store for the window contents. In this case, the associated *DC* may be NULL but a valid backing store bitmap should be specified.

Finally, please note that GTK+ 2.0 as well as macOS provide double buffering themselves natively. You can either use *wxWindow:isDoubleBuffered/1* to determine whether you need to use buffering or not, or use *wxAutoBufferedPaintDC* (not implemented in wx) to avoid needless double buffering on the systems which already do it automatically.

See: *wxDC*, *wxMemoryDC*, *wxBufferedPaintDC*, *wxAutoBufferedPaintDC* (not implemented in wx)

This class is derived (and can use functions) from: *wxMemoryDC* *wxDC*

wxWidgets docs: wxBufferedDC

## DATA TYPES

```
wxBufferedDC() = wx:wx_object()
```

## EXPORTS

```
new() -> wxBufferedDC()
```

Default constructor.

You must call one of the *init/4* methods later in order to use the device context.

```
new(Dc) -> wxBufferedDC()
```

Types:

Dc = wxDC:wxDC()\

```
new(Dc, Area) -> wxBufferedDC()
```

```
new(Dc, Area :: [Option]) -> wxBufferedDC()
```

Types:

Dc = wxDC:wxDC()\
 Option = {buffer, wxBitmap:wxBitmap()} \| {style, integer()}\

Creates a buffer for the provided dc.

*init/4* must not be called when using this constructor.

```
new(Dc, Area, Options :: [Option]) -> wxBufferedDC()
```

Types:

Dc = wxDC:wxDC()\
 Area = {W :: integer(), H :: integer()}\
 Option = {style, integer()}\

Creates a buffer for the provided *dc*.

*init/4* must not be called when using this constructor.

```
destroy(This :: wxBufferedDC()) -> ok
```

Copies everything drawn on the DC so far to the underlying DC associated with this object, if any.

```
init(This, Dc) -> ok
```

Types:

This = wxBufferedDC()\
 Dc = wxDC:wxDC()\

```
init(This, Dc, Area) -> ok
```

```
init(This, Dc, Area :: [Option]) -> ok
```

Types:

This = wxBufferedDC()\
 Dc = wxDC:wxDC()\
 Option = {buffer, wxBitmap:wxBitmap()} \| {style, integer()}\

```
init(This, Dc, Area, Options :: [Option]) -> ok
```

Types:

This = wxBufferedDC()\
 Dc = wxDC:wxDC()\
 Area = {W :: integer(), H :: integer()}\
 Option = {style, integer()}\

Initializes the object created using the default constructor.

Please see the constructors for parameter details.
