ui/wpf/UIwrapper/UIwrapper/toolkit.cpp

changeset 0
2483f517c562
equal deleted inserted replaced
-1:000000000000 0:2483f517c562
1 // Dies ist die Haupt-DLL.
2
3 #include "stdafx.h"
4 #include <stdio.h>
5
6 #include "toolkit.h"
7
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 };
42
43
44 void* ObjectToPtr(Object ^obj) {
45 GCHandle handle = GCHandle::Alloc(obj);
46 IntPtr pointer = GCHandle::ToIntPtr(handle);
47 return pointer.ToPointer();
48 }
49
50 Object^ PtrToObject(void *ptr) {
51 GCHandle h = GCHandle::FromIntPtr(IntPtr(ptr));
52 Object^ object = h.Target;
53 //h.Free();
54 return object;
55 }
56
57 // EventWrapper
58
59 ObjEventWrapper::ObjEventWrapper(UIcallback callback, void *eventdata) {
60 this->callback = callback;
61 this->eventdata = eventdata;
62 action = gcnew Action<IntPtr>(this, &ObjEventWrapper::Callback);
63 }
64
65 Action<IntPtr>^ ObjEventWrapper::GetAction() {
66 return action;
67 }
68
69 void ObjEventWrapper::Callback(IntPtr uiobj) {
70 if (callback) {
71 callback(uiobj.ToPointer(), eventdata);
72 }
73 }
74
75
76 EventWrapper::EventWrapper(UIcallback callback, void *eventdata) {
77 this->callback = callback;
78 this->eventdata = eventdata;
79 }
80
81 void EventWrapper::Callback(Object ^sender, RoutedEventArgs ^e) {
82 if (callback) {
83 callback(NULL, eventdata);
84 }
85 }
86
87
88
89 UI_EXPORT void __stdcall UIinit(char *appname) {
90 UI::Application ^app = UI::Application::GetInstance();
91 app->Name = gcnew String(appname);
92 }
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
109 UI_EXPORT void __stdcall UImain() {
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();
122 thread->Join();
123 }
124
125 UI_EXPORT void __stdcall UIshow(gcroot<UI::MainWindow^> *window) {
126 (*window)->ShowWindow();
127 }

mercurial