本来是没有这一篇记录的,因为之前猜是肯定用了C++的析构函数做拷贝,因此很多dc看起来只要是对dc画东西,然后出了栈后,内容就自然而然的到了画面上(clientDC上)。今天无意中撞到了wxBufferedDC的代码,索性就这个猜测证实了一下。
wxBufferedDC,一般我们用的时候,会用某个clientDC作为参数传入,这样,其实在内部被m_dc记录下来,
dcbuffer.h中,可以看到如下声明,成员变量m_dc是个指针,记住了进来的dc的地址(一般就是我们传的ClientDC)。另外一个地方就是析构函数,如果m_dc不为空的话,会调用UnMask()方法。
class WXDLLIMPEXP_CORE wxBufferedDC : public wxMemoryDC
{
public:
// Default ctor, must subsequently call Init for two stage construction.
wxBufferedDC()
: m_dc(NULL),
m_buffer(NULL),
m_style(0)
{
}
// Construct a wxBufferedDC using a user supplied buffer.
wxBufferedDC(wxDC *dc,
wxBitmap& buffer = wxNullBitmap,
int style = wxBUFFER_CLIENT_AREA)
: m_d