在WxWidgets中使用位图

时间:2014-02-22 17:50:42

标签: c++ windows bitmap wxwidgets

我正在阅读“使用wxWidgets进行跨平台GUI编程”一书中提供的以下代码:

BEGIN_EVENT_TABLE(MyWindow, wxWindow)
  EVT_ERASE_BACKGROUND(MyWindow::OnErase)
END_EVENT_TABLE()

void MyWindow::OnErase(wxEraseEvent& event)
{
    wxClientDC* clientDC = NULL;
    if (!event.GetDC())
        clientDC = new wxClientDC(this);

    wxDC* dc = clientDC ? clientDC : event.GetDC() ;

    wxSize sz = GetClientSize();
    wxEffects effects;
    effects.TileBitmap(wxRect(0, 0, sz.x, sz.y), *dc, m_bitmap);

    if (clientDC)
        delete clientDC;
}

此代码未显示如何加载位图,因此在谷歌搜索后我想出了一些:

wxBitmap m_bitmap;
bool result = m_bitmap.LoadFile("D:\image.png", wxBITMAP_TYPE_PNG);

但是这会返回false的布尔结果,这意味着函数LoadFile无法加载文件。我也尝试加载一个也失败的BMP文件。

我遇到的另一个问题是,wxEffects被标记为编译器警告已弃用。

1 个答案:

答案 0 :(得分:1)

您需要注册PNG图像处理程序才能加载PNG位图。最简单的方法是在应用程序初始化期间的某个时刻调用wxInitAllImageHandlers()函数,例如在被覆盖的MyApp::OnInit()

至于wxEffects被弃用,这只是因为这本书相当陈旧,而且从那以后发生了很多变化。如果您使用的是wxWidgets 3.0,我强烈建议您阅读overview of important changes。如果你不这样做,我建议你使用它更强大。