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(); |