Я создаю простое приложение С++ с пользовательским интерфейсом. Я написал свои классы с необходимой механикой, и теперь мне нужно отобразить некоторые его компоненты с помощью 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*);
};





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