+void wxStaticBox::OnPaint(wxPaintEvent& WXUNUSED(event))
+{
+ RECT rc;
+ ::GetClientRect(GetHwnd(), &rc);
+
+ // draw the entire box in a memory DC
+ wxMemoryDC memdc;
+ wxBitmap bitmap(rc.right, rc.bottom);
+ memdc.SelectObject(bitmap);
+
+ PaintBackground(memdc, rc);
+ PaintForeground(memdc, rc);
+
+ // now only blit the static box border itself, not the interior, to avoid
+ // flicker when background is drawn below
+ //
+ // note that it seems to be faster to do 4 small blits here and then paint
+ // directly into wxPaintDC than painting background in wxMemoryDC and then
+ // blitting everything at once to wxPaintDC, this is why we do it like this
+ wxPaintDC dc(this);
+ int borderTop, border;
+ GetBordersForSizer(&borderTop, &border);
+
+ // top
+ dc.Blit(border, 0, rc.right - border, borderTop,
+ &memdc, border, 0);
+ // bottom
+ dc.Blit(border, rc.bottom - border, rc.right - border, border,
+ &memdc, border, rc.bottom - border);
+ // left
+ dc.Blit(0, 0, border, rc.bottom,
+ &memdc, 0, 0);
+ // right (note that upper and bottom right corners were already part of the
+ // first two blits so we shouldn't overwrite them here to avoi flicker)
+ dc.Blit(rc.right - border, borderTop,
+ border, rc.bottom - borderTop - border,
+ &memdc, rc.right - border, borderTop);
+
+
+ // create the region excluding box children
+ AutoHRGN hrgn((HRGN)MSWGetRegionWithoutChildren());
+ RECT rcWin;
+ ::GetWindowRect(GetHwnd(), &rcWin);
+ ::OffsetRgn(hrgn, -rcWin.left, -rcWin.top);
+
+ // and also the box itself
+ MSWGetRegionWithoutSelf((WXHRGN) hrgn, rc.right, rc.bottom);
+ wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl();
+ HDCClipper clipToBg(GetHdcOf(*impl), hrgn);
+
+ // paint the inside of the box (excluding box itself and child controls)
+ PaintBackground(dc, rc);
+}
+
+#endif // !__WXWINCE__
+
+
+wxPoint wxStaticBox::GetClientAreaOrigin() const
+{
+ // See: http://msdn.microsoft.com/en-us/library/aa511279.aspx
+ wxPoint pt = ConvertDialogToPixels(wxPoint(6,11));
+ return pt;
+}
+
+
+void wxStaticBox::DoGetClientSize(int *width, int *height) const
+{
+ // See: http://msdn.microsoft.com/en-us/library/aa511279.aspx
+ wxPoint lr = ConvertDialogToPixels(wxPoint(6,7));
+ wxPoint ul = GetClientAreaOrigin();
+ wxSize sz = GetSize();
+
+ if (width)
+ *width = sz.x - ul.x - lr.x;
+ if (height)
+ *height = sz.y - ul.y - lr.x;