+ // don't call our (or even wxTopLevelWindow) version because we want
+ // the real (full) client area size, not excluding the tool/status bar
+ int width, height;
+ wxWindow::DoGetClientSize(&width, &height);
+
+#if wxUSE_STATUSBAR
+ wxStatusBar *statbar = GetStatusBar();
+ if ( statbar && statbar->IsShown() )
+ {
+ height -= statbar->GetClientSize().y;
+ }
+#endif // wxUSE_STATUSBAR
+
+ int tx, ty, tw, th;
+ toolbar->GetPosition( &tx, &ty );
+ toolbar->GetSize( &tw, &th );
+
+ int x, y;
+ if ( toolbar->HasFlag(wxTB_BOTTOM) )
+ {
+ x = 0;
+ y = height - th;
+ }
+ else if ( toolbar->HasFlag(wxTB_RIGHT) )
+ {
+ x = width - tw;
+ y = 0;
+ }
+ else // left or top
+ {
+ x = 0;
+ y = 0;
+ }
+
+#if defined(WINCE_WITH_COMMANDBAR)
+ // We're using a commandbar - so we have to allow for it.
+ if (GetMenuBar() && GetMenuBar()->GetCommandBar())
+ {
+ RECT rect;
+ ::GetWindowRect((HWND) GetMenuBar()->GetCommandBar(), &rect);
+ y = rect.bottom - rect.top;
+ }
+#endif // WINCE_WITH_COMMANDBAR
+
+ if ( toolbar->HasFlag(wxTB_BOTTOM) )
+ {
+ if ( ty < 0 && ( -ty == th ) )
+ ty = height - th;
+ if ( tx < 0 && (-tx == tw ) )
+ tx = 0;
+ }
+ else if ( toolbar->HasFlag(wxTB_RIGHT) )
+ {
+ if( ty < 0 && ( -ty == th ) )
+ ty = 0;
+ if( tx < 0 && ( -tx == tw ) )
+ tx = width - tw;
+ }
+ else // left or top
+ {
+ if (ty < 0 && (-ty == th))
+ ty = 0;
+ if (tx < 0 && (-tx == tw))
+ tx = 0;
+ }
+
+ int desiredW,
+ desiredH;
+
+ if ( toolbar->IsVertical() )
+ {
+ desiredW = tw;
+ desiredH = height;
+ }
+ else
+ {
+ desiredW = width;
+ desiredH = th;
+ }
+
+ // use the 'real' MSW position here, don't offset relatively to the
+ // client area origin
+ toolbar->SetSize(x, y, desiredW, desiredH, wxSIZE_NO_ADJUSTMENTS);
+