我有MSVC ++ 15和wxwidgets-3.1.0。我正在关注《 Cross-Platform GUI Programming with wxWidgets (2005)》这本书。我陷入了第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;
}
当我编译上面的代码时,出现错误:
Identifier "wxEffects" is undefined
。 最佳答案
看来wxEffects
已从默认的wxWidgets版本中删除,但没有为TileBitmap
函数添加任何替代内容。
如果您自己构建wxWidgets,则可以通过进行2.8兼容性构建(在构建之前编辑include/wx/msw/setup.h
)来启用此功能。
但是,如果您仅使用wxWidgets标头和预编译的库,则可以选择放入您自己的此函数版本。源代码是here,因此您可以将整个bool wxEffectsImpl::TileBitmap
复制到其中并复制到程序中,删除wxEffectsImpl::
并确保已包含正确的标题。
sample apps之一具有以下可能适合您的简化版本:
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;
}
该示例实际上使它成为
MyApp
的成员,但是您不必这样做,您可以将其复制到需要的.cpp
文件中,然后直接调用它。关于c++ - wxEffects未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52883318/