我有MSVC++ 15和wxwidgets-3.1.0.我正在阅读使用wxWidgets(2005)的跨平台GUI编程一书.我坚持第5章"绘图和打印"中的代码:
#include <wx/effects.h>
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;
}
Run Code Online (Sandbox Code Playgroud)
当我编译上面的代码时,我收到错误:Identifier "wxEffects" is undefined.
它似乎wxEffects已从wxWidgets的默认构建中删除,但没有为该TileBitmap函数添加任何替换.
如果您自己构建wxWidgets,那么您可以通过执行2.8兼容性构建(include/wx/msw/setup.h在构建之前编辑)来启用它.
但是,如果您只是使用wxWidgets标头和预编译库,则可以选择放入您自己的此函数版本.源代码在这里,所以您可以将整个内容复制bool wxEffectsImpl::TileBitmap到您的程序中,删除wxEffectsImpl::并确保您已包含正确的标头.
其中一个示例应用程序具有以下可能适合您的简化版本:
bool 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;
}
Run Code Online (Sandbox Code Playgroud)
该示例实际上使其成为其成员MyApp但您不必这样做,您只需将其复制到.cpp您需要的文件中并直接调用它即可.