void MyDrawText(wxDC &dc, const wxString &s, wxCoord x, wxCoord y, wxCoord w, wxCoord h) { #ifdef __WXMSW__ // this special purpose implementation is because the MSW implementation calls TextExtent, which costs 25% of all cpu time //wxMSWDCImpl *impl = (wxMSWDCImpl *)dc.GetImpl(); //impl->DrawAnyText(s, x, y); // protected, sigh dc.CalcBoundingBox(x, y); dc.CalcBoundingBox(x + w, y + h); HDC hdc = (HDC)dc.GetHDC(); ::SetTextColor(hdc, dc.GetTextForeground().GetPixel()); ::SetBkColor(hdc, dc.GetTextBackground().GetPixel()); ::ExtTextOut(hdc, x, y, 0, NULL, s.c_str(), s.length(), NULL); #else dc.DrawText(s, x, y); #endif }