fzeet 0.6.3 → 0.6.4
Sign up to get free protection for your applications and to get access to all the features.
- data/examples/Control/ExplorerBrowser.rbw +32 -0
- data/examples/Control/WebBrowser.rbw +33 -0
- data/examples/Dialog/FileDialog.rbw +3 -1
- data/examples/MDI.rbw +112 -10
- data/examples/Raw/UIRibbon/Command.rbw +27 -27
- data/examples/Raw/UIRibbon/Minimal.rbw +18 -18
- data/lib/fzeet/Control/Common.rb +18 -3
- data/lib/fzeet/Control/ExplorerBrowser.rb +66 -0
- data/lib/fzeet/Control/Scintilla.rb +8 -0
- data/lib/fzeet/Control/WebBrowser.rb +174 -0
- data/lib/fzeet/Control.rb +2 -0
- data/lib/fzeet/Dialog/FileDialog.rb +7 -1
- data/lib/fzeet/Dialog/ShellFileDialog.rb +12 -0
- data/lib/fzeet/Window/Common.rb +36 -4
- data/lib/fzeet/Window/MDI.rb +12 -0
- data/lib/fzeet/windows/com.rb +33 -1
- data/lib/fzeet/windows/kernel.rb +2 -0
- data/lib/fzeet/windows/ole - Copy.rb +446 -0
- data/lib/fzeet/windows/ole.rb +187 -0
- data/lib/fzeet/windows/shdocvw - Copy.rb +171 -0
- data/lib/fzeet/windows/shdocvw.rb +102 -0
- data/lib/fzeet/windows/shell/Common.rb +181 -0
- data/lib/fzeet/windows/user/Window.rb +11 -0
- data/lib/fzeet/windows.rb +1 -0
- metadata +11 -4
data/lib/fzeet/Window/Common.rb
CHANGED
@@ -99,7 +99,12 @@ module Fzeet
|
|
99
99
|
|
100
100
|
if uMsg == Windows::WM_CREATE
|
101
101
|
@@instances[hwnd.to_i].menu = Menu.new.
|
102
|
-
append(:popup, '&
|
102
|
+
append(:popup, '&Windows', PopupMenu.new.
|
103
|
+
append(:string, 'Tile &Horizontal', :tileHorz).
|
104
|
+
append(:string, 'Tile &Vertical', :tileVert).
|
105
|
+
append(:string, '&Cascade', :cascade).
|
106
|
+
append(:string, 'Arrange &Icons', :arrangeIcons)
|
107
|
+
)
|
103
108
|
|
104
109
|
ccs = Windows::CLIENTCREATESTRUCT.new
|
105
110
|
|
@@ -113,6 +118,18 @@ module Fzeet
|
|
113
118
|
)
|
114
119
|
|
115
120
|
@@instances[hwnd.to_i].instance_variable_set(:@client, Handle.wrap(hwndClient, WindowMethods))
|
121
|
+
|
122
|
+
@@instances[hwnd.to_i].
|
123
|
+
on(:command, :tileHorz) { Windows.TileWindows(hwndClient, Windows::MDITILE_HORIZONTAL, nil, 0, nil) }.
|
124
|
+
on(:command, :tileVert) { Windows.TileWindows(hwndClient, Windows::MDITILE_VERTICAL, nil, 0, nil) }.
|
125
|
+
on(:command, :cascade) { Windows.CascadeWindows(hwndClient, Windows::MDITILE_ZORDER, nil, 0, nil) }.
|
126
|
+
on(:command, :arrangeIcons) { Windows.ArrangeIconicWindows(hwndClient) }.
|
127
|
+
|
128
|
+
on(:initmenupopup) { |args|
|
129
|
+
[:tileHorz, :tileVert, :cascade, :arrangeIcons].each { |command|
|
130
|
+
@@instances[hwnd.to_i].menu[command].enabled = !Windows.GetWindow(hwndClient, Windows::GW_CHILD).null?
|
131
|
+
}
|
132
|
+
}
|
116
133
|
end
|
117
134
|
|
118
135
|
result = @@instances[hwnd.to_i].windowProc(hwnd, uMsg, wParam, lParam) if @@instances[hwnd.to_i]
|
@@ -290,9 +307,24 @@ module Fzeet
|
|
290
307
|
}
|
291
308
|
|
292
309
|
case _opts[:anchor]
|
293
|
-
when :ltr
|
294
|
-
|
295
|
-
|
310
|
+
when :ltr
|
311
|
+
@parent.on(:size) { |args|
|
312
|
+
self.position = @parent.rect.tap { |r| r[:bottom] = _opts[:height] }.to_a
|
313
|
+
|
314
|
+
args[:result] = nil if @parent.class == MDIChild
|
315
|
+
}
|
316
|
+
when :lrb
|
317
|
+
@parent.on(:size) { |args|
|
318
|
+
self.position = @parent.rect.tap { |r| r[:top] = r[:bottom] - _opts[:height]; r[:bottom] = _opts[:height] }.to_a
|
319
|
+
|
320
|
+
args[:result] = nil if @parent.class == MDIChild
|
321
|
+
}
|
322
|
+
when :ltrb
|
323
|
+
@parent.on(:size) { |args|
|
324
|
+
self.position = @parent.rect.to_a
|
325
|
+
|
326
|
+
args[:result] = nil if @parent.class == MDIChild
|
327
|
+
}
|
296
328
|
else raise ArgumentError, "Bad anchor spec: #{_opts[:anchor]}."
|
297
329
|
end if _opts[:anchor] && @parent
|
298
330
|
end
|
data/lib/fzeet/Window/MDI.rb
CHANGED
@@ -12,6 +12,18 @@ module Fzeet
|
|
12
12
|
|
13
13
|
super
|
14
14
|
end
|
15
|
+
|
16
|
+
def activeChild
|
17
|
+
((pchild = FFI::Pointer.new(Windows.SendMessage(client.handle, Windows::WM_MDIGETACTIVE, 0, 0))).null?) ?
|
18
|
+
nil :
|
19
|
+
Handle.instance(pchild)
|
20
|
+
end
|
21
|
+
|
22
|
+
def activate(child)
|
23
|
+
Windows.SendMessage(client.handle, Windows::WM_MDIACTIVATE, child.handle.to_i, 0)
|
24
|
+
|
25
|
+
self
|
26
|
+
end
|
15
27
|
end
|
16
28
|
|
17
29
|
MDIChild = BasicWindow['Fzeet.MDIChild',
|
data/lib/fzeet/windows/com.rb
CHANGED
@@ -273,11 +273,43 @@ module Fzeet
|
|
273
273
|
|
274
274
|
Unknown = COM::Instance[IUnknown]
|
275
275
|
|
276
|
+
IDispatch = COM::Interface[IUnknown,
|
277
|
+
GUID['00020400-0000-0000-C000-000000000046'],
|
278
|
+
|
279
|
+
GetTypeInfoCount: [[:pointer], :long],
|
280
|
+
GetTypeInfo: [[:uint, :ulong, :pointer], :long],
|
281
|
+
GetIDsOfNames: [[:pointer, :pointer, :uint, :ulong, :pointer], :long],
|
282
|
+
Invoke: [[:long, :pointer, :ulong, :ushort, :pointer, :pointer, :pointer, :pointer], :long]
|
283
|
+
]
|
284
|
+
|
285
|
+
Dispatch = COM::Instance[IDispatch]
|
286
|
+
|
287
|
+
IConnectionPointContainer = COM::Interface[IUnknown,
|
288
|
+
GUID['B196B284-BAB4-101A-B69C-00AA00341D07'],
|
289
|
+
|
290
|
+
EnumConnectionPoints: [[:pointer], :long],
|
291
|
+
FindConnectionPoint: [[:pointer, :pointer], :long]
|
292
|
+
]
|
293
|
+
|
294
|
+
ConnectionPointContainer = COM::Instance[IConnectionPointContainer]
|
295
|
+
|
296
|
+
IConnectionPoint = COM::Interface[IUnknown,
|
297
|
+
GUID['B196B286-BAB4-101A-B69C-00AA00341D07'],
|
298
|
+
|
299
|
+
GetConnectionInterface: [[:pointer], :long],
|
300
|
+
GetConnectionPointContainer: [[:pointer], :long],
|
301
|
+
Advise: [[:pointer, :pointer], :long],
|
302
|
+
Unadvise: [[:ulong], :long],
|
303
|
+
EnumConnections: [[:pointer], :long]
|
304
|
+
]
|
305
|
+
|
306
|
+
ConnectionPoint = COM::Instance[IConnectionPoint]
|
307
|
+
|
276
308
|
IObjectWithSite = COM::Interface[IUnknown,
|
277
309
|
GUID['FC4801A3-2BA9-11CF-A229-00AA003D7352'],
|
278
310
|
|
279
311
|
SetSite: [[:pointer], :long],
|
280
|
-
GetSite: [[:pointer, :pointer], :
|
312
|
+
GetSite: [[:pointer, :pointer], :long]
|
281
313
|
]
|
282
314
|
|
283
315
|
ObjectWithSite = COM::Callback[IObjectWithSite]
|
data/lib/fzeet/windows/kernel.rb
CHANGED
@@ -10,6 +10,8 @@ module Fzeet
|
|
10
10
|
attach_function :LoadLibrary, :LoadLibraryA, [:string], :pointer
|
11
11
|
attach_function :FreeLibrary, [:pointer], :int
|
12
12
|
|
13
|
+
attach_function :GetSystemDefaultLCID, [], :ulong
|
14
|
+
|
13
15
|
if WINVER.AtLeastWindowsXP?
|
14
16
|
class ACTCTX < FFI::Struct
|
15
17
|
layout \
|
@@ -0,0 +1,446 @@
|
|
1
|
+
require_relative 'com'
|
2
|
+
|
3
|
+
module Fzeet
|
4
|
+
module Windows
|
5
|
+
ffi_lib 'ole32'
|
6
|
+
ffi_convention :stdcall
|
7
|
+
|
8
|
+
attach_function :OleInitialize, [:pointer], :long
|
9
|
+
attach_function :OleUninitialize, [], :void
|
10
|
+
|
11
|
+
def InitializeOle
|
12
|
+
DetonateHresult(:OleInitialize, nil)
|
13
|
+
|
14
|
+
at_exit { OleUninitialize() }
|
15
|
+
end
|
16
|
+
|
17
|
+
module_function :InitializeOle
|
18
|
+
|
19
|
+
attach_function :CoTaskMemAlloc, [:ulong], :pointer
|
20
|
+
attach_function :CoTaskMemFree, [:pointer], :void
|
21
|
+
|
22
|
+
VT_EMPTY = 0
|
23
|
+
VT_NULL = 1
|
24
|
+
VT_I2 = 2
|
25
|
+
VT_I4 = 3
|
26
|
+
VT_R4 = 4
|
27
|
+
VT_R8 = 5
|
28
|
+
VT_CY = 6
|
29
|
+
VT_DATE = 7
|
30
|
+
VT_BSTR = 8
|
31
|
+
VT_DISPATCH = 9
|
32
|
+
VT_ERROR = 10
|
33
|
+
VT_BOOL = 11
|
34
|
+
VT_VARIANT = 12
|
35
|
+
VT_UNKNOWN = 13
|
36
|
+
VT_DECIMAL = 14
|
37
|
+
VT_I1 = 16
|
38
|
+
VT_UI1 = 17
|
39
|
+
VT_UI2 = 18
|
40
|
+
VT_UI4 = 19
|
41
|
+
VT_I8 = 20
|
42
|
+
VT_UI8 = 21
|
43
|
+
VT_INT = 22
|
44
|
+
VT_UINT = 23
|
45
|
+
VT_VOID = 24
|
46
|
+
VT_HRESULT = 25
|
47
|
+
VT_PTR = 26
|
48
|
+
VT_SAFEARRAY = 27
|
49
|
+
VT_CARRAY = 28
|
50
|
+
VT_USERDEFINED = 29
|
51
|
+
VT_LPSTR = 30
|
52
|
+
VT_LPWSTR = 31
|
53
|
+
VT_FILETIME = 64
|
54
|
+
VT_BLOB = 65
|
55
|
+
VT_STREAM = 66
|
56
|
+
VT_STORAGE = 67
|
57
|
+
VT_STREAMED_OBJECT = 68
|
58
|
+
VT_STORED_OBJECT = 69
|
59
|
+
VT_BLOB_OBJECT = 70
|
60
|
+
VT_CF = 71
|
61
|
+
VT_CLSID = 72
|
62
|
+
VT_VECTOR = 0x1000
|
63
|
+
VT_ARRAY = 0x2000
|
64
|
+
VT_BYREF = 0x4000
|
65
|
+
VT_RESERVED = 0x8000
|
66
|
+
VT_ILLEGAL = 0xffff
|
67
|
+
VT_ILLEGALMASKED = 0xfff
|
68
|
+
VT_TYPEMASK = 0xff
|
69
|
+
|
70
|
+
class PROPERTYKEY < FFI::Struct
|
71
|
+
layout \
|
72
|
+
:fmtid, GUID,
|
73
|
+
:pid, :ulong
|
74
|
+
|
75
|
+
def self.[](type, index)
|
76
|
+
new.tap { |key|
|
77
|
+
key[:fmtid].tap { |guid|
|
78
|
+
guid[:Data1] = 0x00000000 + index
|
79
|
+
guid[:Data2] = 0x7363
|
80
|
+
guid[:Data3] = 0x696e
|
81
|
+
[0x84, 0x41, 0x79, 0x8a, 0xcf, 0x5a, 0xeb, 0xb7].each_with_index { |part, i|
|
82
|
+
guid[:Data4][i] = part
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
key[:pid] = type
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
def ==(other) Windows.memcmp(other, self, size) == 0 end
|
91
|
+
end
|
92
|
+
|
93
|
+
class LARGE_INTEGER < FFI::Union
|
94
|
+
include AnonymousSupport
|
95
|
+
|
96
|
+
layout \
|
97
|
+
:_, Class.new(FFI::Struct) {
|
98
|
+
layout \
|
99
|
+
:LowPart, :ulong,
|
100
|
+
:HighPart, :long
|
101
|
+
},
|
102
|
+
|
103
|
+
:QuadPart, :long_long
|
104
|
+
end
|
105
|
+
|
106
|
+
class ULARGE_INTEGER < FFI::Union
|
107
|
+
include AnonymousSupport
|
108
|
+
|
109
|
+
layout \
|
110
|
+
:_, Class.new(FFI::Struct) {
|
111
|
+
layout \
|
112
|
+
:LowPart, :ulong,
|
113
|
+
:HighPart, :ulong
|
114
|
+
},
|
115
|
+
|
116
|
+
:QuadPart, :ulong_long
|
117
|
+
end
|
118
|
+
|
119
|
+
class FILETIME < FFI::Struct
|
120
|
+
layout \
|
121
|
+
:dwLowDateTime, :ulong,
|
122
|
+
:dwHighDateTime, :ulong
|
123
|
+
end
|
124
|
+
|
125
|
+
class BSTRBLOB < FFI::Struct
|
126
|
+
layout \
|
127
|
+
:cbSize, :ulong,
|
128
|
+
:pData, :pointer
|
129
|
+
end
|
130
|
+
|
131
|
+
class BLOB < FFI::Struct
|
132
|
+
layout \
|
133
|
+
:cbSize, :ulong,
|
134
|
+
:pBlobData, :pointer
|
135
|
+
end
|
136
|
+
|
137
|
+
class CA < FFI::Struct
|
138
|
+
layout \
|
139
|
+
:cElems, :ulong,
|
140
|
+
:pElems, :pointer
|
141
|
+
end
|
142
|
+
|
143
|
+
class DECIMAL < FFI::Struct
|
144
|
+
layout \
|
145
|
+
:wReserved, :ushort,
|
146
|
+
:scale, :uchar,
|
147
|
+
:sign, :uchar,
|
148
|
+
:Hi32, :ulong,
|
149
|
+
:Lo64, :ulong_long
|
150
|
+
end
|
151
|
+
|
152
|
+
class PROPVARIANT < FFI::Union
|
153
|
+
include AnonymousSupport
|
154
|
+
|
155
|
+
layout \
|
156
|
+
:_, Class.new(FFI::Struct) {
|
157
|
+
layout \
|
158
|
+
:vt, :ushort,
|
159
|
+
:wReserved1, :ushort,
|
160
|
+
:wReserved2, :ushort,
|
161
|
+
:wReserved3, :ushort,
|
162
|
+
:_, Class.new(FFI::Union) {
|
163
|
+
layout \
|
164
|
+
:cVal, :char,
|
165
|
+
:bVal, :uchar,
|
166
|
+
:iVal, :short,
|
167
|
+
:uiVal, :ushort,
|
168
|
+
:lVal, :long,
|
169
|
+
:ulVal, :ulong,
|
170
|
+
:intVal, :int,
|
171
|
+
:uintVal, :uint,
|
172
|
+
:hVal, LARGE_INTEGER,
|
173
|
+
:uhVal, ULARGE_INTEGER,
|
174
|
+
:fltVal, :float,
|
175
|
+
:dblVal, :double,
|
176
|
+
:boolVal, :short,
|
177
|
+
:bool, :short,
|
178
|
+
:scode, :long,
|
179
|
+
:cyVal, :long_long,
|
180
|
+
:date, :double,
|
181
|
+
:filetime, FILETIME,
|
182
|
+
:puuid, :pointer,
|
183
|
+
:pclipdata, :pointer,
|
184
|
+
:bstrVal, :pointer,
|
185
|
+
:bstrblobVal, BSTRBLOB,
|
186
|
+
:blob, BLOB,
|
187
|
+
:pszVal, :pointer,
|
188
|
+
:pwszVal, :pointer,
|
189
|
+
:punkVal, :pointer,
|
190
|
+
:pdispVal, :pointer,
|
191
|
+
:pStream, :pointer,
|
192
|
+
:pStorage, :pointer,
|
193
|
+
:pVersionedStream, :pointer,
|
194
|
+
:parray, :pointer,
|
195
|
+
:cac, CA,
|
196
|
+
:caub, CA,
|
197
|
+
:cai, CA,
|
198
|
+
:caui, CA,
|
199
|
+
:cal, CA,
|
200
|
+
:caul, CA,
|
201
|
+
:cah, CA,
|
202
|
+
:cauh, CA,
|
203
|
+
:caflt, CA,
|
204
|
+
:cadbl, CA,
|
205
|
+
:cabool, CA,
|
206
|
+
:cascode, CA,
|
207
|
+
:cacy, CA,
|
208
|
+
:cadate, CA,
|
209
|
+
:cafiletime, CA,
|
210
|
+
:cauuid, CA,
|
211
|
+
:caclipdata, CA,
|
212
|
+
:cabstr, CA,
|
213
|
+
:cabstrblob, CA,
|
214
|
+
:calpstr, CA,
|
215
|
+
:calpwstr, CA,
|
216
|
+
:capropvar, CA,
|
217
|
+
:pcVal, :pointer,
|
218
|
+
:pbVal, :pointer,
|
219
|
+
:piVal, :pointer,
|
220
|
+
:puiVal, :pointer,
|
221
|
+
:plVal, :pointer,
|
222
|
+
:pulVal, :pointer,
|
223
|
+
:pintVal, :pointer,
|
224
|
+
:puintVal, :pointer,
|
225
|
+
:pfltVal, :pointer,
|
226
|
+
:pdblVal, :pointer,
|
227
|
+
:pboolVal, :pointer,
|
228
|
+
:pdecVal, :pointer,
|
229
|
+
:pscode, :pointer,
|
230
|
+
:pcyVal, :pointer,
|
231
|
+
:pdate, :pointer,
|
232
|
+
:pbstrVal, :pointer,
|
233
|
+
:ppunkVal, :pointer,
|
234
|
+
:ppdispVal, :pointer,
|
235
|
+
:pparray, :pointer,
|
236
|
+
:pvarVal, :pointer
|
237
|
+
}
|
238
|
+
},
|
239
|
+
|
240
|
+
:decVal, DECIMAL
|
241
|
+
|
242
|
+
def self.[](t, *v) new.tap { |var| var.send("#{t}=", *v) } end
|
243
|
+
|
244
|
+
def bool; raise 'Wrong type tag.' unless self[:vt] == VT_BOOL; self[:boolVal] != 0 end
|
245
|
+
def bool=(bool) self[:vt] = VT_BOOL; self[:boolVal] = (bool) ? -1 : 0 end
|
246
|
+
|
247
|
+
def int; raise 'Wrong type tag.' unless self[:vt] == VT_I4; self[:intVal] end
|
248
|
+
def int=(int) self[:vt] = VT_I4; self[:intVal] = int end
|
249
|
+
|
250
|
+
def uint; raise 'Wrong type tag.' unless self[:vt] == VT_UI4; self[:uintVal] end
|
251
|
+
def uint=(uint) self[:vt] = VT_UI4; self[:uintVal] = uint end
|
252
|
+
|
253
|
+
def unknown
|
254
|
+
raise 'Wrong type tag.' unless self[:vt] == VT_UNKNOWN
|
255
|
+
|
256
|
+
yield Unknown.new(self[:punkVal])
|
257
|
+
ensure
|
258
|
+
Windows.PropVariantClear(self)
|
259
|
+
end
|
260
|
+
|
261
|
+
def unknown=(unknown) self[:vt] = VT_UNKNOWN; self[:punkVal] = unknown.pointer; unknown.AddRef end
|
262
|
+
|
263
|
+
def wstring; raise 'Wrong type tag.' unless self[:vt] == VT_LPWSTR; Windows.WCSTOMBS(self[:pwszVal]) end
|
264
|
+
|
265
|
+
def wstring=(string)
|
266
|
+
self[:vt] = VT_LPWSTR
|
267
|
+
|
268
|
+
FFI::MemoryPointer.new(:pointer) { |p|
|
269
|
+
Windows.DetonateHresult(:SHStrDup, string, p)
|
270
|
+
|
271
|
+
self[:pwszVal] = p.read_pointer
|
272
|
+
}
|
273
|
+
end
|
274
|
+
|
275
|
+
def decimal
|
276
|
+
raise 'Wrong type tag.' unless self[:vt] == VT_DECIMAL
|
277
|
+
|
278
|
+
Rational(self[:decVal][:Lo64], 10 ** self[:decVal][:scale]) + self[:decVal][:Hi32]
|
279
|
+
end
|
280
|
+
|
281
|
+
def decimal=(decimal) self[:vt] = VT_DECIMAL; self[:decVal][:Lo64] = decimal end
|
282
|
+
end
|
283
|
+
|
284
|
+
attach_function :PropVariantClear, [:pointer], :long
|
285
|
+
|
286
|
+
ffi_lib 'oleaut32'
|
287
|
+
ffi_convention :stdcall
|
288
|
+
|
289
|
+
attach_function :SysAllocString, [:buffer_in], :pointer
|
290
|
+
attach_function :SysFreeString, [:pointer], :void
|
291
|
+
attach_function :SysStringLen, [:pointer], :uint
|
292
|
+
|
293
|
+
OLEIVERB_PRIMARY = 0
|
294
|
+
OLEIVERB_SHOW = -1
|
295
|
+
OLEIVERB_OPEN = -2
|
296
|
+
OLEIVERB_HIDE = -3
|
297
|
+
OLEIVERB_UIACTIVATE = -4
|
298
|
+
OLEIVERB_INPLACEACTIVATE = -5
|
299
|
+
OLEIVERB_DISCARDUNDOSTATE = -6
|
300
|
+
|
301
|
+
IOleWindow = COM::Interface[IUnknown,
|
302
|
+
GUID['00000114-0000-0000-C000-000000000046'],
|
303
|
+
|
304
|
+
GetWindow: [[:pointer], :long],
|
305
|
+
ContextSensitiveHelp: [[:int], :long]
|
306
|
+
]
|
307
|
+
|
308
|
+
OleWindow = COM::Instance[IOleWindow]
|
309
|
+
|
310
|
+
IOleInPlaceSite = COM::Interface[IOleWindow,
|
311
|
+
GUID['00000119-0000-0000-C000-000000000046'],
|
312
|
+
|
313
|
+
CanInPlaceActivate: [[], :long],
|
314
|
+
OnInPlaceActivate: [[], :long],
|
315
|
+
OnUIActivate: [[], :long],
|
316
|
+
GetWindowContext: [[:pointer, :pointer, :pointer, :pointer, :pointer], :long],
|
317
|
+
Scroll: [[:long_long], :long],
|
318
|
+
OnUIDeactivate: [[:int], :long],
|
319
|
+
OnInPlaceDeactivate: [[], :long],
|
320
|
+
DiscardUndoState: [[], :long],
|
321
|
+
DeactivateAndUndo: [[], :long],
|
322
|
+
OnPosRectChange: [[:pointer], :long]
|
323
|
+
]
|
324
|
+
|
325
|
+
OleInPlaceSite = COM::Callback[IOleInPlaceSite]
|
326
|
+
|
327
|
+
IOleInPlaceUIWindow = COM::Interface[IOleWindow,
|
328
|
+
GUID['00000115-0000-0000-C000-000000000046'],
|
329
|
+
|
330
|
+
GetBorder: [[:pointer], :long],
|
331
|
+
RequestBorderSpace: [[:pointer], :long],
|
332
|
+
SetBorderSpace: [[:pointer], :long],
|
333
|
+
SetActiveObject: [[:pointer], :long]
|
334
|
+
]
|
335
|
+
|
336
|
+
OleInPlaceUIWindow = COM::Callback[IOleInPlaceUIWindow]
|
337
|
+
|
338
|
+
class OLEINPLACEFRAMEINFO < FFI::Struct
|
339
|
+
layout \
|
340
|
+
:cb, :uint,
|
341
|
+
:fMDIApp, :int,
|
342
|
+
:hwndFrame, :pointer,
|
343
|
+
:haccel, :pointer,
|
344
|
+
:cAccelEntries, :uint
|
345
|
+
end
|
346
|
+
|
347
|
+
class OLEMENUGROUPWIDTHS < FFI::Struct
|
348
|
+
layout \
|
349
|
+
:width, [:long, 6]
|
350
|
+
end
|
351
|
+
|
352
|
+
IOleInPlaceFrame = COM::Interface[IOleInPlaceUIWindow,
|
353
|
+
GUID['00000116-0000-0000-C000-000000000046'],
|
354
|
+
|
355
|
+
InsertMenus: [[:pointer, :pointer], :long],
|
356
|
+
SetMenu: [[:pointer, :pointer, :pointer], :long],
|
357
|
+
RemoveMenus: [[:pointer], :long],
|
358
|
+
SetStatusText: [[:pointer], :long],
|
359
|
+
EnableModeless: [[:int], :long],
|
360
|
+
TranslateAccelerator: [[:pointer, :ushort], :long]
|
361
|
+
]
|
362
|
+
|
363
|
+
OleInPlaceFrame = COM::Callback[IOleInPlaceFrame]
|
364
|
+
|
365
|
+
IOleClientSite = COM::Interface[IUnknown,
|
366
|
+
GUID['00000118-0000-0000-C000-000000000046'],
|
367
|
+
|
368
|
+
SaveObject: [[], :long],
|
369
|
+
GetMoniker: [[:ulong, :ulong, :pointer], :long],
|
370
|
+
GetContainer: [[:pointer], :long],
|
371
|
+
ShowObject: [[], :long],
|
372
|
+
OnShowWindow: [[:int], :long],
|
373
|
+
RequestNewObjectLayout: [[], :long]
|
374
|
+
]
|
375
|
+
|
376
|
+
OleClientSite = COM::Callback[IOleClientSite]
|
377
|
+
|
378
|
+
OLEGETMONIKER_ONLYIFTHERE = 1
|
379
|
+
OLEGETMONIKER_FORCEASSIGN = 2
|
380
|
+
OLEGETMONIKER_UNASSIGN = 3
|
381
|
+
OLEGETMONIKER_TEMPFORUSER = 4
|
382
|
+
|
383
|
+
OLEWHICHMK_CONTAINER = 1
|
384
|
+
OLEWHICHMK_OBJREL = 2
|
385
|
+
OLEWHICHMK_OBJFULL = 3
|
386
|
+
|
387
|
+
USERCLASSTYPE_FULL = 1
|
388
|
+
USERCLASSTYPE_SHORT = 2
|
389
|
+
USERCLASSTYPE_APPNAME = 3
|
390
|
+
|
391
|
+
OLEMISC_RECOMPOSEONRESIZE = 0x00000001
|
392
|
+
OLEMISC_ONLYICONIC = 0x00000002
|
393
|
+
OLEMISC_INSERTNOTREPLACE = 0x00000004
|
394
|
+
OLEMISC_STATIC = 0x00000008
|
395
|
+
OLEMISC_CANTLINKINSIDE = 0x00000010
|
396
|
+
OLEMISC_CANLINKBYOLE1 = 0x00000020
|
397
|
+
OLEMISC_ISLINKOBJECT = 0x00000040
|
398
|
+
OLEMISC_INSIDEOUT = 0x00000080
|
399
|
+
OLEMISC_ACTIVATEWHENVISIBLE = 0x00000100
|
400
|
+
OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x00000200
|
401
|
+
OLEMISC_INVISIBLEATRUNTIME = 0x00000400
|
402
|
+
OLEMISC_ALWAYSRUN = 0x00000800
|
403
|
+
OLEMISC_ACTSLIKEBUTTON = 0x00001000
|
404
|
+
OLEMISC_ACTSLIKELABEL = 0x00002000
|
405
|
+
OLEMISC_NOUIACTIVATE = 0x00004000
|
406
|
+
OLEMISC_ALIGNABLE = 0x00008000
|
407
|
+
OLEMISC_SIMPLEFRAME = 0x00010000
|
408
|
+
OLEMISC_SETCLIENTSITEFIRST = 0x00020000
|
409
|
+
OLEMISC_IMEMODE = 0x00040000
|
410
|
+
OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x00080000
|
411
|
+
OLEMISC_WANTSTOMENUMERGE = 0x00100000
|
412
|
+
OLEMISC_SUPPORTSMULTILEVELUNDO = 0x00200000
|
413
|
+
|
414
|
+
OLECLOSE_SAVEIFDIRTY = 0
|
415
|
+
OLECLOSE_NOSAVE = 1
|
416
|
+
OLECLOSE_PROMPTSAVE = 2
|
417
|
+
|
418
|
+
IOleObject = COM::Interface[IUnknown,
|
419
|
+
GUID['00000112-0000-0000-C000-000000000046'],
|
420
|
+
|
421
|
+
SetClientSite: [[:pointer], :long],
|
422
|
+
GetClientSite: [[:pointer], :long],
|
423
|
+
SetHostNames: [[:pointer, :pointer], :long],
|
424
|
+
Close: [[:ulong], :long],
|
425
|
+
SetMoniker: [[:ulong, :pointer], :long],
|
426
|
+
GetMoniker: [[:ulong, :ulong, :pointer], :long],
|
427
|
+
InitFromData: [[:pointer, :int, :ulong], :long],
|
428
|
+
GetClipboardData: [[:ulong, :pointer], :long],
|
429
|
+
DoVerb: [[:long, :pointer, :pointer, :long, :pointer, :pointer], :long],
|
430
|
+
EnumVerbs: [[:pointer], :long],
|
431
|
+
Update: [[], :long],
|
432
|
+
IsUpToDate: [[], :long],
|
433
|
+
GetUserClassID: [[:pointer], :long],
|
434
|
+
GetUserType: [[:ulong, :pointer], :long],
|
435
|
+
SetExtent: [[:ulong, :pointer], :long],
|
436
|
+
GetExtent: [[:ulong, :pointer], :long],
|
437
|
+
Advise: [[:pointer, :pointer], :long],
|
438
|
+
Unadvise: [[:ulong], :long],
|
439
|
+
EnumAdvise: [[:pointer], :long],
|
440
|
+
GetMiscStatus: [[:ulong, :pointer], :long],
|
441
|
+
SetColorScheme: [[:pointer], :long]
|
442
|
+
]
|
443
|
+
|
444
|
+
OleObject = COM::Instance[IOleObject]
|
445
|
+
end
|
446
|
+
end
|