wxwidgets添加背景图片

BEGIN_EVENT_TABLE(xxFrame,wxFrame)
    EVT_PAINT(xxFrame::OnPaint)
END_EVENT_TABLE()

void xxFrame::OnPaint(wxPaintEvent& event)
{
    wxBitmap BackgroundBitmap;
    BackgroundBitmap.LoadFile(wxT("./2010.jpg"), wxBITMAP_TYPE_ANY );
    wxPaintDC dc(this);
    dc.DrawBitmap(BackgroundBitmap, 0, 0);
}
 

此法不是甚好,有更好的方法,望告知
小图片重复绘图铺满客户端
BEGIN_EVENT_TABLE(ganjiFrame,wxFrame)
    //(*EventTable(ganjiFrame)
    //*)
    EVT_PAINT(ganjiFrame::OnPaint)
    EVT_ERASE_BACKGROUND(ganjiFrame::OnEraseBackground)
END_EVENT_TABLE()


void ganjiFrame::OnPaint( wxPaintEvent &WXUNUSED(event) )
{
    wxPaintDC dc( this );
    PrepareDC( dc );
}

void ganjiFrame::OnEraseBackground(wxEraseEvent& event)
{

    wxImage image;
    wxBitmap m_background;
    if (image.LoadFile(_T("backgrnd.png"), wxBITMAP_TYPE_PNG))
    {
        m_background = wxBitmap(image);
    }
    if (m_background.Ok())
    {
        wxSize sz = GetClientSize();
        wxRect rect(0, 0, sz.x, sz.y);

        if (event.GetDC())
        {
            TileBitmap(rect, *(event.GetDC()), m_background);

        }
        else
        {
            wxClientDC dc(this);
            TileBitmap(rect, dc, m_background);
        }
    }
    else
        event.Skip(); // The official way of doing it
}
bool ganjiFrame::TileBitmap(const wxRect& rect, wxDC& dc, wxBitmap& bitmap)
{
    int w = bitmap.GetWidth();
    int h = bitmap.GetHeight();

    int i, j;
    for (i = rect.x; i < rect.x + rect.width; i += w)
    {
        for (j = rect.y; j < rect.y + rect.height; j+= h)
            dc.DrawBitmap(bitmap, i, j);
    }
    return true;
}

上一篇: Using wxWidgets with SDL in C++   下一篇: 一个计算机电子书站

提交疑问

回顶部