wxEffects не определено - PullRequest
       10

wxEffects не определено

0 голосов
/ 19 октября 2018

У меня MSVC ++ 15 и wxwidgets-3.1.0.Я слежу за книгой Кроссплатформенное программирование с помощью 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.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

MM ответ уже действительно хорош.Но вот второй способ сделать функцию TileBitmap с помощью рисованной кисти вместо ручного многократного рисования растрового изображения.

bool TileBitmap(const wxRect& rect, wxDC& dc, wxBitmap& bitmap)
{
    wxBrush brush(bitmap);

    wxDCBrushChanger bc(dc, brush);
    wxDCPenChanger pc(dc, *wxTRANSPARENT_PEN);

    dc.DrawRectangle(rect);

    return true;
}
0 голосов
/ 19 октября 2018

Кажется, 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;
}

Пример фактически сделал его членом MyApp но вам не нужно этого делать, вы можете просто скопировать его в файл .cpp, где он вам нужен, и вызвать его напрямую.

...