我正在阅读“使用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
被标记为编译器警告已弃用。
答案 0 :(得分:1)
您需要注册PNG图像处理程序才能加载PNG位图。最简单的方法是在应用程序初始化期间的某个时刻调用wxInitAllImageHandlers()函数,例如在被覆盖的MyApp::OnInit()
。
至于wxEffects
被弃用,这只是因为这本书相当陈旧,而且从那以后发生了很多变化。如果您使用的是wxWidgets 3.0,我强烈建议您阅读overview of important changes。如果你不这样做,我建议你使用它更强大。