A wxPaintDC must be constructed if an application wishes to paint on the client area of a window from within an EVT_PAINT() event handler.
This should normally be constructed as a temporary stack object; don't store a wxPaintDC object. If you have an EVT_PAINT() handler, you must create a wxPaintDC object within it even if you don't actually use it.
Using wxPaintDC within your EVT_PAINT() handler is important because it automatically sets the clipping area to the damaged area of the window. Attempts to draw outside this area do not appear.
To draw on a window from outside your EVT_PAINT() handler, construct a wxClientDC object.
To draw on the whole window including decorations, construct a wxWindowDC object (Windows only).
A wxPaintDC object is initialized to use the same font and colours as the window it is associated with.
You may experience flickering in Scrolled Windows if, during the OnPaint/OnDraw, you select Bitmaps in a MemoryDC. (For example, at each call of OnPaint, you may want to create a MemoryDC, select an existing bitmap in it, and blit to the Scrolled Window DC.) To avoid this, you've got to create your Memory DC out of the onPaint/onDraw 'loop', just once.