All Articles

How to use wxBufferedDC in wxwidget

wxBufferedDC的目的是為了減少閃碩等畫面更新可能帶來的問題,它有幾個預設的constructer,若是要在wxBufferedDC中自己維持一個bitmap以增進速度,則方法是先new出一個bitmap object

wxDC* dc2 = new wxClientDC(this);
wxBufferedDC dc(dc2, *buffer);

然後在繪圖的function中,把此bitmap的pointer丟進wxBufferedDC的constructer,後再進行繪圖動作

{
  wxDC* dc2 = new wxClientDC(this);
  wxBufferedDC dc(dc2, *buffer);
  .
  .
  .
  dc.UnMask();
  delete dc2;
}

此function執行到最後面時會去執行wxBufferedDC的deconstructor,就會自動把bitmap的東西倒進wxClientDC中 (畫到螢幕上),但之前new出來的dc2並不會自動delte掉,這樣程式執行時會有memory leak造成的不穩定情形,所以要在function最後面加dc.UnMask()來手動把bitmap倒進wxClientDC中,再delete掉dc2。

Published 29 Jul 2009