ui/wpf/UIwrapper/UIwrapper/toolkit.cpp

changeset 135
b9dc9cdfa23a
parent 83
a38aec91bd66
child 137
c9b8b9e0cfe8
equal deleted inserted replaced
134:69e8e0936858 135:b9dc9cdfa23a
4 #include <stdio.h> 4 #include <stdio.h>
5 5
6 #include "toolkit.h" 6 #include "toolkit.h"
7 7
8 #using "UIcore.dll" 8 #using "UIcore.dll"
9
10 static UIcallback startup_func;
11 void *startup_data;
12 static UIcallback open_func;
13 void *open_data;
14 static UIcallback exit_func;
15 void *exit_data;
16
17 public ref class AppCallbacks : public UI::IApplicationCallbacks {
18 public:
19 UIcallback startupFunc = NULL;
20 void *startupData = NULL;
21 UIcallback openFunc = NULL;
22 void *openData = NULL;
23 UIcallback exitFunc = NULL;
24 void *exitData = NULL;
25
26 virtual void __clrcall OnStartup() {
27 if (startupFunc) {
28 startupFunc(NULL, startupData);
29 }
30 }
31 virtual void __clrcall OnOpen() {
32 if (openFunc) {
33 openFunc(NULL, openData);
34 }
35 }
36 virtual void __clrcall OnExit() {
37 if (exitFunc) {
38 exitFunc(NULL, exitData);
39 }
40 }
41 };
9 42
10 43
11 void* ObjectToPtr(Object ^obj) { 44 void* ObjectToPtr(Object ^obj) {
12 GCHandle handle = GCHandle::Alloc(obj); 45 GCHandle handle = GCHandle::Alloc(obj);
13 IntPtr pointer = GCHandle::ToIntPtr(handle); 46 IntPtr pointer = GCHandle::ToIntPtr(handle);
56 UI_EXPORT void __stdcall UIinit(char *appname) { 89 UI_EXPORT void __stdcall UIinit(char *appname) {
57 UI::Application ^app = UI::Application::GetInstance(); 90 UI::Application ^app = UI::Application::GetInstance();
58 app->Name = gcnew String(appname); 91 app->Name = gcnew String(appname);
59 } 92 }
60 93
94 UI_EXPORT void __stdcall UIonstartup(UIcallback f, void *userdata) {
95 startup_func = f;
96 startup_data = userdata;
97 }
98
99 UI_EXPORT void __stdcall UIonopen(UIcallback f, void *userdata) {
100 open_func = f;
101 open_data = userdata;
102 }
103
104 UI_EXPORT void __stdcall UIonexit(UIcallback f, void *userdata) {
105 exit_func = f;
106 exit_data = userdata;
107 }
108
61 UI_EXPORT void __stdcall UImain() { 109 UI_EXPORT void __stdcall UImain() {
62 Thread ^thread = UI::Application::GetInstance()->Start(); 110 AppCallbacks ^ac = gcnew AppCallbacks();
111 ac->startupFunc = startup_func;
112 ac->startupData = startup_data;
113 ac->openFunc = open_func;
114 ac->openData = open_data;
115 ac->exitFunc = exit_func;
116 ac->exitData = exit_data;
117
118 UI::Application ^app = UI::Application::GetInstance();
119 app->callbacks = ac;
120
121 Thread ^thread = app->Start();
63 thread->Join(); 122 thread->Join();
64 } 123 }
65 124
66 UI_EXPORT void __stdcall UIshow(gcroot<UI::MainWindow^> *window) { 125 UI_EXPORT void __stdcall UIshow(gcroot<UI::MainWindow^> *window) {
67 (*window)->ShowWindow(); 126 (*window)->ShowWindow();

mercurial