+    ::DrawFrameControl(GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), &r, DFC_SCROLL, style);
+}
+
+void
+wxRendererMSW::DrawCheckBox(wxWindow * WXUNUSED(win),
+                            wxDC& dc,
+                            const wxRect& rect,
+                            int flags)
+{
+    RECT r;
+    wxCopyRectToRECT(rect, r);
+
+    int style = DFCS_BUTTONCHECK;
+    if ( flags & wxCONTROL_CHECKED )
+        style |= DFCS_CHECKED;
+    if ( flags & wxCONTROL_DISABLED )
+        style |= DFCS_INACTIVE;
+    if ( flags & wxCONTROL_FLAT )
+        style |= DFCS_MONO;
+    if ( flags & wxCONTROL_PRESSED )
+        style |= DFCS_PUSHED;
+    if ( flags & wxCONTROL_CURRENT )
+        style |= DFCS_HOT;
+
+    ::DrawFrameControl(GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), &r, DFC_BUTTON, style);
+}
+
+void
+wxRendererMSW::DrawPushButton(wxWindow * WXUNUSED(win),
+                              wxDC& dc,
+                              const wxRect& rectOrig,
+                              int flags)
+{
+    wxRect rect(rectOrig);
+
+    int style = DFCS_BUTTONPUSH;
+    if ( flags & wxCONTROL_DISABLED )
+        style |= DFCS_INACTIVE;
+    if ( flags & wxCONTROL_PRESSED )
+        style |= DFCS_PUSHED | DFCS_FLAT;
+    if ( flags & wxCONTROL_ISDEFAULT )
+    {
+        // DrawFrameControl() doesn't seem to support default buttons so we
+        // have to draw the border ourselves
+        wxDCPenChanger pen(dc, *wxBLACK_PEN);
+        wxDCBrushChanger brush(dc, *wxTRANSPARENT_BRUSH);
+        dc.DrawRectangle(rect);
+        rect.Deflate(1);
+    }
+
+    RECT rc;
+    wxCopyRectToRECT(rect, rc);
+
+    ::DrawFrameControl(GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), &rc, DFC_BUTTON, style);
+}
+
+void wxRendererMSW::DrawFocusRect(wxWindow * WXUNUSED(win),
+                                  wxDC& dc,
+                                  const wxRect& rect,
+                                  int WXUNUSED(flags))
+{
+    RECT rc;
+    wxCopyRectToRECT(rect, rc);
+
+    ::DrawFocusRect(GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), &rc);
+}
+
+wxSize wxRendererMSW::GetCheckBoxSize(wxWindow * WXUNUSED(win))
+{
+    return wxSize(::GetSystemMetrics(SM_CXMENUCHECK),
+                  ::GetSystemMetrics(SM_CYMENUCHECK));
+}
+
+int wxRendererMSW::GetHeaderButtonHeight(wxWindow * WXUNUSED(win))
+{
+    // some "reasonable" value returned in case of error, it doesn't really
+    // correspond to anything but it's better than returning 0
+    static const int DEFAULT_HEIGHT = 20;
+
+
+    // create a temporary header window just to get its geometry
+    HWND hwndHeader = ::CreateWindow(WC_HEADER, NULL, 0,
+                                     0, 0, 0, 0, NULL, NULL, NULL, NULL);
+    if ( !hwndHeader )
+        return DEFAULT_HEIGHT;
+
+    wxON_BLOCK_EXIT1( ::DestroyWindow, hwndHeader );
+
+    // initialize the struct filled with the values by Header_Layout()
+    RECT parentRect = { 0, 0, 100, 100 };
+    WINDOWPOS wp = { 0, 0, 0, 0, 0, 0, 0 };
+    HDLAYOUT hdl = { &parentRect, &wp };
+
+    return Header_Layout(hwndHeader, &hdl) ? wp.cy : DEFAULT_HEIGHT;