]> git.saurik.com Git - wxWidgets.git/blobdiff - docs/latex/wx/bufferdc.tex
don't use _T() inside wxGetTranslation() and related macros (wxTRANSLATE, _, ......
[wxWidgets.git] / docs / latex / wx / bufferdc.tex
index 0e903887ec742313e04809c8e5a6b10bac242ecc..4722c6a531f54270bcf361cce4fa1cdcdf439acd 100644 (file)
 
 \section{\class{wxBufferedDC}}\label{wxbuffereddc}
 
-This simple class provides a simple way to avoid flicker: when drawing on it,
-everything is in fact first drawn on an in-memory buffer (a 
-\helpref{wxBitmap}{wxbitmap}) and then copied to the screen only once, when this
-object is destroyed.
-
-It can be used in the same way as any other device context. wxBufferedDC itself
-typically replaces \helpref{wxClientDC}{wxclientdc}, if you want to use it in
-your \texttt{OnPaint()} handler, you should look at
-\helpref{wxBufferedPaintDC}{wxbufferedpaintdc}.
+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
+\helpref{wxBitmap}{wxbitmap}) and then copied to the screen, using the
+associated wxDC, only once, when this object is destroyed. wxBufferedDC itself
+is typically associated with \helpref{wxClientDC}{wxclientdc}, if you want to
+use it in your \texttt{EVT\_PAINT} handler, you should look at
+\helpref{wxBufferedPaintDC}{wxbufferedpaintdc} instead.
+
+When used like this, a valid \arg{dc} must be specified in the constructor
+while the \arg{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. 
+
+There is another possible use for wxBufferedDC is to use it to maintain a
+backing store for the window contents. In this case, the associated \arg{dc}
+may be \NULL but a valid backing store bitmap should be specified.
+
+Finally, please note that GTK+ 2.0 as well as OS X provide double buffering
+themselves natively. You can either use \helpref{wxWindow::IsDoubleBuffered}{wxwindowisdoublebuffered} 
+to determine whether you need to use buffering or not, or use 
+\helpref{wxAutoBufferedPaintDC}{wxautobufferedpaintdc} to avoid needless double
+buffering on the systems which already do it automatically.
 
 \wxheading{Derived from}
 
@@ -31,9 +46,16 @@ your \texttt{OnPaint()} handler, you should look at
 
 <wx/dcbuffer.h>
 
+\wxheading{Library}
+
+\helpref{wxCore}{librarieslist}
+
 \wxheading{See also}
 
-\helpref{wxDC}{wxdc}
+\helpref{wxDC}{wxdc},\rtfsp
+\helpref{wxMemoryDC}{wxmemorydc},\rtfsp
+\helpref{wxBufferedPaintDC}{wxbufferedpaintdc},\rtfsp
+\helpref{wxAutoBufferedPaintDC}{wxautobufferedpaintdc}
 
 
 \latexignore{\rtfignore{\wxheading{Members}}}
@@ -44,7 +66,7 @@ your \texttt{OnPaint()} handler, you should look at
 
 \func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{const wxSize\& }{area}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
 
-\func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{const wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
+\func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
 
 If you use the first, default, constructor, you must call one of the 
 \helpref{Init}{wxbuffereddcinit} methods later in order to use the object.
@@ -75,7 +97,7 @@ device context).}
 
 \func{void}{Init}{\param{wxDC *}{dc}, \param{const wxSize\& }{area}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
 
-\func{void}{Init}{\param{wxDC *}{dc}, \param{const wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
+\func{void}{Init}{\param{wxDC *}{dc}, \param{wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
 
 These functions initialize the object created using the default constructor.
 Please see \helpref{constructors documentation}{wxbuffereddcctor} for details.
@@ -96,14 +118,16 @@ this object, if any.
 
 This is a subclass of \helpref{wxBufferedDC}{wxbuffereddc} which can be used
 inside of an \texttt{OnPaint()} event handler. Just create an object of this class instead
-of \helpref{wxPaintDC}{wxpaintdc} and that's all you have to do to (mostly)
-avoid flicker. The only thing to watch out for is that if you are using this
-class together with \helpref{wxScrolledWindow}{wxscrolledwindow}, you probably
+of \helpref{wxPaintDC}{wxpaintdc} and make sure \helpref{wxWindow::SetBackgroundStyle}{wxwindowgetbackgroundstyle}
+is called with wxBG\_STYLE\_CUSTOM somewhere in the class initialization code, and that's all
+you have to do to (mostly) avoid flicker. The only thing to watch out for is that if you are
+using this class together with \helpref{wxScrolledWindow}{wxscrolledwindow}, you probably
 do \textbf{not} want to call \helpref{PrepareDC}{wxscrolledwindowpreparedc} on it as it
 already does this internally for the real underlying wxPaintDC.
 
 \wxheading{Derived from}
 
+\helpref{wxBufferedDC}{wxbuffereddc}\\
 \helpref{wxMemoryDC}{wxmemorydc}\\
 \helpref{wxDC}{wxdc}\\
 \helpref{wxObject}{wxobject}
@@ -112,12 +136,22 @@ already does this internally for the real underlying wxPaintDC.
 
 <wx/dcbuffer.h>
 
+\wxheading{Library}
+
+\helpref{wxCore}{librarieslist}
+
+\wxheading{See also}
+
+\helpref{wxDC}{wxdc},\rtfsp
+\helpref{wxBufferedDC}{wxbuffereddc},\rtfsp
+\helpref{wxAutoBufferedPaintDC}{wxautobufferedpaintdc}
+
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
 \membersection{wxBufferedPaintDC::wxBufferedPaintDC}\label{wxbufferedpaintdcctor}
 
-\func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{const wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
+\func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
 
 \func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
 
@@ -136,3 +170,44 @@ Copies everything drawn on the DC so far to the window associated with this
 object, using a \helpref{wxPaintDC}{wxpaintdc}.
 
 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{\class{wxAutoBufferedPaintDC}}\label{wxautobufferedpaintdc}
+
+This wxDC derivative can be used inside of an \texttt{OnPaint()} event handler to achieve
+double-buffered drawing. Just create an object of this class instead of \helpref{wxPaintDC}{wxpaintdc}
+and make sure \helpref{wxWindow::SetBackgroundStyle}{wxwindowgetbackgroundstyle} is called
+with wxBG\_STYLE\_CUSTOM somewhere in the class initialization code, and that's all you have
+to do to (mostly) avoid flicker.
+
+The difference between \helpref{wxBufferedPaintDC}{wxbufferedpaintdc} and this class,
+is the lightweigthness - on platforms which have native double-buffering, wxAutoBufferedPaintDC is simply
+a typedef of wxPaintDC. Otherwise, it is a typedef of wxBufferedPaintDC.
+
+
+\wxheading{Derived from}
+
+\helpref{wxBufferedPaintDC}{wxbufferedpaintdc}\\
+\helpref{wxBufferedDC}{wxbuffereddc}\\
+\helpref{wxMemoryDC}{wxmemorydc}\\
+\helpref{wxDC}{wxdc}\\
+\helpref{wxObject}{wxobject}
+
+\wxheading{Include files}
+
+<wx/dcbuffer.h>
+
+\wxheading{See also}
+
+\helpref{wxDC}{wxdc},\rtfsp
+\helpref{wxBufferedPaintDC}{wxbufferedpaintdc}
+
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxAutoBufferedPaintDC::wxAutoBufferedPaintDC}\label{wxautobufferedpaintdcctor}
+
+\func{}{wxAutoBufferedPaintDC}{\param{wxWindow *}{window}}
+
+Constructor. Pass a pointer to the window on which you wish to paint.
+