wxSize wxFlatButton::GetBestSize() { wxBitmap bmp(1, 1); wxMemoryDC memDc(bmp); wxGCDC gdc; wxGraphicsRenderer* const renderer = wxGraphicsRenderer::GetDefaultRenderer(); wxGraphicsContext* context = renderer->CreateContext(memDc); gdc.SetGraphicsContext(context); int buttonWidth(0); int buttonHeight(0); gdc.SetFont(GetTextFont()); // Get the button width // [spacer | text + spacer | image + spacer ] buttonWidth += X_SPACER; if(!m_text.IsEmpty()) { buttonWidth += gdc.GetTextExtent(m_text).x; buttonWidth += X_SPACER; } if(m_bmp.IsOk()) { buttonWidth += m_bmp.GetWidth(); buttonWidth += X_SPACER; } wxSize textExtent = gdc.GetTextExtent(m_text); int bmpHeight = m_bmp.IsOk() ? m_bmp.GetHeight() : 0; buttonHeight = std::max(textExtent.GetHeight(), bmpHeight); buttonHeight += 2 * Y_SPACER; return wxSize(buttonWidth + 2 * X_SPACER, buttonHeight); }
void CMcAppBar::OnPaint() { CPaintDC dc(this); // device context for painting CRect clientRect; GetClientRect(&clientRect); CRgn rgn; rgn.CreateRectRgnIndirect(&clientRect); dc.SelectClipRgn(&rgn,RGN_COPY); CMemoryDC memDc(&dc); memDc.FillSolidRect(&clientRect,m_dwBkgColor); m_AppCtrl.Draw(&memDc); }