在 WxWidgets 中使用位图

Working with Bitmaps in WxWidgets

本文关键字:位图 WxWidgets      更新时间:2023-10-16

我在我正在阅读的"使用 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被编译器警告标记为弃用。

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

至于wxEffects被弃用,这只是因为这本书相当旧,从那以后有很多事情发生了变化。如果您使用的是wxWidgets 3.0,我强烈建议您阅读重要更改的概述。如果你不这样做,我建议你更强烈地使用它。