Должен ли я объявить собственный класс wxFrame? - PullRequest
2 голосов
/ 16 апреля 2019

Я создаю простое приложение на C ++ с пользовательским интерфейсом. Я написал собственные классы с необходимой механикой, и теперь я должен отобразить некоторые из его компонентов, используя wxWidgets. MyApp содержит объекты этих классов, но они также необходимы в MyFrame при обработке событий. Было бы намного удобнее без передачи указателей на эти объекты на MyFrame и реализации всего в функции MyApp::OnInit. Это возможно?

// should contain informations about game state, players, gameboard, etc
class MyApp : public wxApp {
    GameBoard gb;
    Player player;
    bool lightTheme;
public:
    virtual bool OnInit();
};
// should contain only window layout, button events, etc
class MyFrame : public wxFrame {
    GameBoard *gb;
    Player *player;
    bool *lightTheme;

    std::vector<wxStaticBitmap*> cardImages;
// some events here
    void displayImages(wxGridSizer*);
public:
    MyFrame(GameBoard*, Player*, bool*);
};

1 Ответ

1 голос
/ 16 апреля 2019

Чтобы ответить на ваш заглавный вопрос, вам не нужно объявлять MyFrame, вы можете просто создать и напрямую использовать wxFrame и Bind() для подключения различных обработчиков событий. Во всех случаях, кроме самых простых, обычно удобно иметь класс MyFrame, централизующий данные и обработчики событий для окна, но это не требуется никакими средствами.

Если вы решите оставить все в MyApp, вместо этого вы можете найти wxGetApp () полезной для доступа к нему из различных мест в вашем коде.

...