2016-11-22 5 views
1

Я пытаюсь написать компонент wxWidgets приложения, которое вызывается другой частью приложения, так что нет главной программы wxWidgets. У меня возникают проблемы с поиском правильной последовательности вызовов.wxWidgets без основной программы wx - как закодировать?

Как я понимаю, сначала мне нужно подкласс wxApp:

class TestApp : public wxApp { 
public: 
    virtual bool OnInit() override; 
}; 
bool TestApp::OnInit() { 
    cerr << "app init\n"<<flush; 
} 

Тогда мне нужно сделать что-то вроде этого, когда я хочу, чтобы запустить WxWidgets:

TestApp* app = new TestApp(); 
    cerr << "a\n"; 
    wxApp::SetInstance(app); 
    cerr << "b\n"; 
    int argCount = 0; 
    char* argv[0]; 
    if(! wxEntryStart(argCount, argv)) { 
     cerr << "wx failed to start\n"; 
     wxExit(); 
    } 
    cerr << "d\n"; 
    int res = wxGetApp().OnRun(); 

Но он никогда не называет OnInit(). Кто-нибудь знает, что я должен делать?

Этот вопрос отличается от wxWidgets: How to initialize wxApp without using macros and without entering the main application loop? в том, что они не хотите вызвать цикл обработки событий (таким образом они хотят wxEntryStart()), но я делать хочу цикл событий (так, оказывается, я хочу wxEntry()) ,

+0

Возможный дубликат [WxWidgets: Как инициализировать wxApp без использования макросов и без ввода основного цикла приложения] (http://stackoverflow.com/questions/208373/wxwidgets- how-to-initialize-wxapp-without-use-macros-and-without-enter-the) – axalis

ответ

2

wxEntryStart() действительно не называет OnInit(), только wxEntry().

Таким образом, вы можете использовать wxEntry() (который также вызывает OnRun()) или позвоните по телефону wxTheApp->CallOnInit() вручную.

Смотрите здесь для подробностей: wxWidgets: How to initialize wxApp without using macros and without entering the main application loop?

+0

Да, 'wxEntry' вызывает' OnInit() '. Благодарю. –

 Смежные вопросы

  • Нет связанных вопросов^_^