diff -r 69e8e0936858 -r b9dc9cdfa23a ui/wpf/UIwrapper/UIwrapper/toolkit.cpp --- a/ui/wpf/UIwrapper/UIwrapper/toolkit.cpp Sun Jan 22 11:48:50 2017 +0100 +++ b/ui/wpf/UIwrapper/UIwrapper/toolkit.cpp Sun Jan 22 17:23:20 2017 +0100 @@ -7,6 +7,39 @@ #using "UIcore.dll" +static UIcallback startup_func; +void *startup_data; +static UIcallback open_func; +void *open_data; +static UIcallback exit_func; +void *exit_data; + +public ref class AppCallbacks : public UI::IApplicationCallbacks { +public: + UIcallback startupFunc = NULL; + void *startupData = NULL; + UIcallback openFunc = NULL; + void *openData = NULL; + UIcallback exitFunc = NULL; + void *exitData = NULL; + + virtual void __clrcall OnStartup() { + if (startupFunc) { + startupFunc(NULL, startupData); + } + } + virtual void __clrcall OnOpen() { + if (openFunc) { + openFunc(NULL, openData); + } + } + virtual void __clrcall OnExit() { + if (exitFunc) { + exitFunc(NULL, exitData); + } + } +}; + void* ObjectToPtr(Object ^obj) { GCHandle handle = GCHandle::Alloc(obj); @@ -58,8 +91,34 @@ app->Name = gcnew String(appname); } +UI_EXPORT void __stdcall UIonstartup(UIcallback f, void *userdata) { + startup_func = f; + startup_data = userdata; +} + +UI_EXPORT void __stdcall UIonopen(UIcallback f, void *userdata) { + open_func = f; + open_data = userdata; +} + +UI_EXPORT void __stdcall UIonexit(UIcallback f, void *userdata) { + exit_func = f; + exit_data = userdata; +} + UI_EXPORT void __stdcall UImain() { - Thread ^thread = UI::Application::GetInstance()->Start(); + AppCallbacks ^ac = gcnew AppCallbacks(); + ac->startupFunc = startup_func; + ac->startupData = startup_data; + ac->openFunc = open_func; + ac->openData = open_data; + ac->exitFunc = exit_func; + ac->exitData = exit_data; + + UI::Application ^app = UI::Application::GetInstance(); + app->callbacks = ac; + + Thread ^thread = app->Start(); thread->Join(); }