fzeet 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. data/examples/Dialog/Dialog.rbw +2 -2
  2. data/examples/Raw/UIRibbon/Command.dll +0 -0
  3. data/examples/Raw/UIRibbon/Command.rb +17 -11
  4. data/examples/Raw/UIRibbon/Command.xml +6 -0
  5. data/examples/Raw/UIRibbon/Minimal.dll +0 -0
  6. data/examples/Raw/UIRibbon/Minimal.rb +10 -6
  7. data/examples/Raw/UIRibbon/Minimal.xml +4 -0
  8. data/examples/UIRibbon/Color.rbw +12 -0
  9. data/examples/UIRibbon/Command.dll +0 -0
  10. data/examples/UIRibbon/Command.rb +17 -11
  11. data/examples/UIRibbon/Command.xml +6 -0
  12. data/examples/UIRibbon/ContextPopup.dll +0 -0
  13. data/examples/UIRibbon/ContextPopup.rb +23 -0
  14. data/examples/UIRibbon/ContextPopup.rbw +12 -0
  15. data/examples/UIRibbon/ContextPopup.xml +83 -0
  16. data/examples/UIRibbon/Minimal.dll +0 -0
  17. data/examples/UIRibbon/Minimal.rb +10 -6
  18. data/examples/UIRibbon/Minimal.xml +4 -0
  19. data/examples/Version.rbw +5 -0
  20. data/examples/res/go-next-big.bmp +0 -0
  21. data/examples/res/go-previous-big.bmp +0 -0
  22. data/lib/fzeet/Accelerator.rb +23 -3
  23. data/lib/fzeet/Application.rb +1 -1
  24. data/lib/fzeet/{common.rb → Common.rb} +2 -50
  25. data/lib/fzeet/{ControlButton.rb → Control/Button.rb} +1 -1
  26. data/lib/fzeet/{ControlCommon.rb → Control/Common.rb} +1 -1
  27. data/lib/fzeet/Control.rb +1 -1
  28. data/lib/fzeet/Dialog/Common.rb +5 -0
  29. data/lib/fzeet/{DialogFileDialog.rb → Dialog/FileDialog.rb} +1 -43
  30. data/lib/fzeet/Dialog/FolderDialog.rb +45 -0
  31. data/lib/fzeet/Dialog.rb +2 -1
  32. data/lib/fzeet/Menu.rb +77 -77
  33. data/lib/fzeet/UIRibbon.rb +86 -1
  34. data/lib/fzeet/{WindowCommon.rb → Window/Common.rb} +52 -2
  35. data/lib/fzeet/{WindowDialog.rb → Window/Dialog.rb} +6 -6
  36. data/lib/fzeet/{WindowWindow.rb → Window/Window.rb} +1 -1
  37. data/lib/fzeet/{WindowMethods.rb → Window/WindowMethods.rb} +49 -43
  38. data/lib/fzeet/Window.rb +2 -2
  39. data/lib/fzeet/windows/com.rb +97 -15
  40. data/lib/fzeet/windows/{comctlbutton.rb → comctl/Button.rb} +1 -1
  41. data/lib/fzeet/windows/{comctlcommon.rb → comctl/Common.rb} +1 -1
  42. data/lib/fzeet/windows/comctl.rb +1 -1
  43. data/lib/fzeet/windows/{comdlgcommon.rb → comdlg/Common.rb} +1 -1
  44. data/lib/fzeet/windows/{comdlgofn.rb → comdlg/FileDialog.rb} +1 -1
  45. data/lib/fzeet/windows/comdlg.rb +1 -1
  46. data/lib/fzeet/windows/common.rb +80 -5
  47. data/lib/fzeet/windows/gdi.rb +30 -0
  48. data/lib/fzeet/windows/kernel.rb +74 -21
  49. data/lib/fzeet/windows/ole.rb +60 -0
  50. data/lib/fzeet/windows/propsys.rb +40 -0
  51. data/lib/fzeet/windows/shell/Common.rb +10 -0
  52. data/lib/fzeet/windows/shell/FolderDialog.rb +39 -0
  53. data/lib/fzeet/windows/shell.rb +1 -43
  54. data/lib/fzeet/windows/uiribbon.rb +275 -18
  55. data/lib/fzeet/windows/user/Accelerator.rb +182 -0
  56. data/lib/fzeet/windows/user/Common.rb +33 -0
  57. data/lib/fzeet/windows/{userctlbutton.rb → user/Control/Button.rb} +1 -1
  58. data/lib/fzeet/windows/{userctlcommon.rb → user/Control/Common.rb} +1 -1
  59. data/lib/fzeet/windows/user/Control.rb +1 -0
  60. data/lib/fzeet/windows/user/Menu.rb +115 -0
  61. data/lib/fzeet/windows/{usermsg.rb → user/Message.rb} +1 -3
  62. data/lib/fzeet/windows/{usermbox.rb → user/MessageBox.rb} +1 -5
  63. data/lib/fzeet/windows/user/SystemParametersInfo.rb +244 -0
  64. data/lib/fzeet/windows/{userwnd.rb → user/Window.rb} +70 -38
  65. data/lib/fzeet/windows/user.rb +7 -7
  66. data/lib/fzeet/windows.rb +2 -73
  67. data/lib/fzeet.rb +1 -1
  68. metadata +39 -27
  69. data/lib/fzeet/DialogCommon.rb +0 -5
  70. data/lib/fzeet/windows/usercommon.rb +0 -8
  71. data/lib/fzeet/windows/userctl.rb +0 -1
  72. data/lib/fzeet/windows/userkbd.rb +0 -20
  73. data/lib/fzeet/windows/usermenu.rb +0 -50
  74. data/lib/fzeet/windows/userspi.rb +0 -29
  75. /data/examples/Dialog/{FileDialog.rbw → FileAndFolderDialog.rbw} +0 -0
@@ -38,12 +38,12 @@ module Fzeet
38
38
  call "#{opts[:vcvars]}" >> "#{name}.log" &\
39
39
  "#{opts[:link]}" /nologo /machine:x86 /dll /noentry /out:"#{name}.dll" "#{ENV['TEMP']}/#{name}.res" >> "#{name}.log"
40
40
  CMD
41
- # system <<-CMD
41
+ # system <<-CMD
42
42
  #@echo off &\
43
43
  # "#{opts[:uicc]}" "#{name}.xml" "#{name}.bml" /header:"#{name}.h" /res:"#{name}.rc" > "#{name}.log" &\
44
44
  # "#{opts[:windres]}" -o"#{ENV['TEMP']}/#{name}.o" "#{name}.rc" >> "#{name}.log" &\
45
45
  # "#{opts[:gcc]}" -shared -o"#{name}.dll" "#{ENV['TEMP']}/#{name}.o" >> "#{name}.log"
46
- # CMD
46
+ # CMD
47
47
 
48
48
  raise "Ribbon build failed - see #{path}/#{name}.log for details." if File.read("#{path}/#{name}.log") =~ /error/i
49
49
 
@@ -71,32 +71,187 @@ module Fzeet
71
71
  module_function :LoadRibbonDll
72
72
 
73
73
  UI_PKEY_Enabled = PROPERTYKEY[VT_BOOL, 1]
74
+ UI_PKEY_LabelDescription = PROPERTYKEY[VT_LPWSTR, 2]
75
+ UI_PKEY_Keytip = PROPERTYKEY[VT_LPWSTR, 3]
76
+ UI_PKEY_Label = PROPERTYKEY[VT_LPWSTR, 4]
77
+ UI_PKEY_TooltipDescription = PROPERTYKEY[VT_LPWSTR, 5]
78
+ UI_PKEY_TooltipTitle = PROPERTYKEY[VT_LPWSTR, 6]
79
+ UI_PKEY_LargeImage = PROPERTYKEY[VT_UNKNOWN, 7]
80
+ UI_PKEY_LargeHighContrastImage = PROPERTYKEY[VT_UNKNOWN, 8]
81
+ UI_PKEY_SmallImage = PROPERTYKEY[VT_UNKNOWN, 9]
82
+ UI_PKEY_SmallHighContrastImage = PROPERTYKEY[VT_UNKNOWN, 10]
74
83
 
75
- LIBID_UIRibbon = GUID['942f35c2-e83b-45ef-b085-ac295dd63d5b']
84
+ UI_PKEY_CommandId = PROPERTYKEY[VT_UI4, 100]
85
+ UI_PKEY_ItemsSource = PROPERTYKEY[VT_UNKNOWN, 101]
86
+ UI_PKEY_Categories = PROPERTYKEY[VT_UNKNOWN, 102]
87
+ UI_PKEY_CategoryId = PROPERTYKEY[VT_UI4, 103]
88
+ UI_PKEY_SelectedItem = PROPERTYKEY[VT_UI4, 104]
89
+ UI_PKEY_CommandType = PROPERTYKEY[VT_UI4, 105]
90
+ UI_PKEY_ItemImage = PROPERTYKEY[VT_UNKNOWN, 106]
76
91
 
77
- CLSID_UIRibbonFramework = GUID['926749fa-2615-4987-8845-c33e65f2b957']
92
+ UI_PKEY_BooleanValue = PROPERTYKEY[VT_BOOL, 200]
93
+ UI_PKEY_DecimalValue = PROPERTYKEY[VT_DECIMAL, 201]
94
+ UI_PKEY_StringValue = PROPERTYKEY[VT_LPWSTR, 202]
95
+ UI_PKEY_MaxValue = PROPERTYKEY[VT_DECIMAL, 203]
96
+ UI_PKEY_MinValue = PROPERTYKEY[VT_DECIMAL, 204]
97
+ UI_PKEY_Increment = PROPERTYKEY[VT_DECIMAL, 205]
98
+ UI_PKEY_DecimalPlaces = PROPERTYKEY[VT_UI4, 206]
99
+ UI_PKEY_FormatString = PROPERTYKEY[VT_LPWSTR, 207]
100
+ UI_PKEY_RepresentativeString = PROPERTYKEY[VT_LPWSTR, 208]
78
101
 
79
- IID_IUICommandHandler = GUID['75ae0a2d-dc03-4c9f-8883-069660d0beb6']
80
- IID_IUIApplication = GUID['D428903C-729A-491d-910D-682A08FF2522']
81
- IID_IUIFramework = GUID['F4F0385D-6872-43a8-AD09-4C339CB3F5C5']
102
+ UI_PKEY_FontProperties = PROPERTYKEY[VT_UNKNOWN, 300]
103
+ UI_PKEY_FontProperties_Family = PROPERTYKEY[VT_LPWSTR, 301]
104
+ UI_PKEY_FontProperties_Size = PROPERTYKEY[VT_DECIMAL, 302]
105
+ UI_PKEY_FontProperties_Bold = PROPERTYKEY[VT_UI4, 303]
106
+ UI_PKEY_FontProperties_Italic = PROPERTYKEY[VT_UI4, 304]
107
+ UI_PKEY_FontProperties_Underline = PROPERTYKEY[VT_UI4, 305]
108
+ UI_PKEY_FontProperties_Strikethrough = PROPERTYKEY[VT_UI4, 306]
109
+ UI_PKEY_FontProperties_VerticalPositioning = PROPERTYKEY[VT_UI4, 307]
110
+ UI_PKEY_FontProperties_ForegroundColor = PROPERTYKEY[VT_UI4, 308]
111
+ UI_PKEY_FontProperties_BackgroundColor = PROPERTYKEY[VT_UI4, 309]
112
+ UI_PKEY_FontProperties_ForegroundColorType = PROPERTYKEY[VT_UI4, 310]
113
+ UI_PKEY_FontProperties_BackgroundColorType = PROPERTYKEY[VT_UI4, 311]
114
+ UI_PKEY_FontProperties_ChangedProperties = PROPERTYKEY[VT_UNKNOWN, 312]
115
+ UI_PKEY_FontProperties_DeltaSize = PROPERTYKEY[VT_UI4, 313]
82
116
 
83
- IUICommandHandler = COM::Interface[IUnknown,
84
- IID_IUICommandHandler,
117
+ UI_PKEY_RecentItems = PROPERTYKEY[VT_ARRAY | VT_UNKNOWN, 350]
118
+ UI_PKEY_Pinned = PROPERTYKEY[VT_BOOL, 351]
85
119
 
86
- Execute: [[:uint, :int, :pointer, :pointer, :pointer], :long],
87
- UpdateProperty: [[:uint, :pointer, :pointer, :pointer], :long]
120
+ UI_PKEY_Color = PROPERTYKEY[VT_UI4, 400]
121
+ UI_PKEY_ColorType = PROPERTYKEY[VT_UI4, 401]
122
+ UI_PKEY_ColorMode = PROPERTYKEY[VT_UI4, 402]
123
+ UI_PKEY_ThemeColorsCategoryLabel = PROPERTYKEY[VT_LPWSTR, 403]
124
+ UI_PKEY_StandardColorsCategoryLabel = PROPERTYKEY[VT_LPWSTR, 404]
125
+ UI_PKEY_RecentColorsCategoryLabel = PROPERTYKEY[VT_LPWSTR, 405]
126
+ UI_PKEY_AutomaticColorLabel = PROPERTYKEY[VT_LPWSTR, 406]
127
+ UI_PKEY_NoColorLabel = PROPERTYKEY[VT_LPWSTR, 407]
128
+ UI_PKEY_MoreColorsLabel = PROPERTYKEY[VT_LPWSTR, 408]
129
+ UI_PKEY_ThemeColors = PROPERTYKEY[VT_VECTOR | VT_UI4, 409]
130
+ UI_PKEY_StandardColors = PROPERTYKEY[VT_VECTOR | VT_UI4, 410]
131
+ UI_PKEY_ThemeColorsTooltips = PROPERTYKEY[VT_VECTOR | VT_LPWSTR, 411]
132
+ UI_PKEY_StandardColorsTooltips = PROPERTYKEY[VT_VECTOR | VT_LPWSTR, 412]
133
+
134
+ UI_PKEY_Viewable = PROPERTYKEY[VT_BOOL, 1000]
135
+ UI_PKEY_Minimized = PROPERTYKEY[VT_BOOL, 1001]
136
+ UI_PKEY_QuickAccessToolbarDock = PROPERTYKEY[VT_UI4, 1002]
137
+
138
+ UI_PKEY_ContextAvailable = PROPERTYKEY[VT_UI4, 1100]
139
+
140
+ UI_PKEY_GlobalBackgroundColor = PROPERTYKEY[VT_UI4, 2000]
141
+ UI_PKEY_GlobalHighlightColor = PROPERTYKEY[VT_UI4, 2001]
142
+ UI_PKEY_GlobalTextColor = PROPERTYKEY[VT_UI4, 2002]
143
+
144
+ def UI_GetHValue(hsb) LOBYTE(hsb) end
145
+ def UI_GetSValue(hsb) LOBYTE(hsb >> 8) end
146
+ def UI_GetBValue(hsb) LOBYTE(hsb >> 16) end
147
+ def UI_HSB(h, s, b) h | (s << 8) | (b << 16) end
148
+
149
+ def UI_RGB2HSB(r, g, b)
150
+ r, g, b = r.to_f / 255, g.to_f / 255, b.to_f / 255
151
+
152
+ max, min = [r, g, b].max, [r, g, b].min
153
+
154
+ l = (max + min) / 2
155
+
156
+ s = if max == min
157
+ 0
158
+ elsif l < 0.5
159
+ (max - min) / (max + min)
160
+ else
161
+ (max - min) / (2 - (max + min))
162
+ end
163
+
164
+ h = if max == min
165
+ 0
166
+ elsif r == max
167
+ (g - b) / (max - min)
168
+ elsif g == max
169
+ 2 + (b - r) / (max - min)
170
+ else
171
+ 4 + (r - g) / (max - min)
172
+ end * 60
173
+
174
+ h += 360 if h < 0
175
+
176
+ h = h / 360
177
+
178
+ [
179
+ # hue
180
+ (255 * h).round,
181
+
182
+ # saturation
183
+ (255 * s).round,
184
+
185
+ # brightness
186
+ (l < 0.1793) ?
187
+ 0 :
188
+ (l > 0.9821) ?
189
+ 255 :
190
+ (257.7 + 149.9 * Math.log(l)).round
191
+ ]
192
+ end
193
+
194
+ module_function \
195
+ :UI_GetHValue, :UI_GetSValue, :UI_GetBValue, :UI_HSB,
196
+ :UI_RGB2HSB
197
+
198
+ UI_CONTEXTAVAILABILITY_NOTAVAILABLE = 0
199
+ UI_CONTEXTAVAILABILITY_AVAILABLE = 1
200
+ UI_CONTEXTAVAILABILITY_ACTIVE = 2
201
+
202
+ UI_FONTPROPERTIES_NOTAVAILABLE = 0
203
+ UI_FONTPROPERTIES_NOTSET = 1
204
+ UI_FONTPROPERTIES_SET = 2
205
+
206
+ UI_FONTVERTICALPOSITION_NOTAVAILABLE = 0
207
+ UI_FONTVERTICALPOSITION_NOTSET = 1
208
+ UI_FONTVERTICALPOSITION_SUPERSCRIPT = 2
209
+ UI_FONTVERTICALPOSITION_SUBSCRIPT = 3
210
+
211
+ UI_FONTUNDERLINE_NOTAVAILABLE = 0
212
+ UI_FONTUNDERLINE_NOTSET = 1
213
+ UI_FONTUNDERLINE_SET = 2
214
+
215
+ UI_FONTDELTASIZE_GROW = 0
216
+ UI_FONTDELTASIZE_SHRINK = 1
217
+
218
+ UI_CONTROLDOCK_TOP = 1
219
+ UI_CONTROLDOCK_BOTTOM = 3
220
+
221
+ UI_SWATCHCOLORTYPE_NOCOLOR = 0
222
+ UI_SWATCHCOLORTYPE_AUTOMATIC = 1
223
+ UI_SWATCHCOLORTYPE_RGB = 2
224
+
225
+ UI_SWATCHCOLORMODE_NORMAL = 0
226
+ UI_SWATCHCOLORMODE_MONOCHROME = 1
227
+
228
+ IUISimplePropertySet = COM::Interface[IUnknown,
229
+ GUID['c205bb48-5b1c-4219-a106-15bd0a5f24e2'],
230
+
231
+ GetValue: [[:pointer, :pointer], :long]
88
232
  ]
89
233
 
90
- IUIApplication = COM::Interface[IUnknown,
91
- IID_IUIApplication,
234
+ UISimplePropertySet = COM::Instance[IUISimplePropertySet]
92
235
 
93
- OnViewChanged: [[:uint, :int, :pointer, :int, :int], :long],
94
- OnCreateUICommand: [[:uint, :int, :pointer], :long],
95
- OnDestroyUICommand: [[:uint, :int, :pointer], :long]
236
+ IUIRibbon = COM::Interface[IUnknown,
237
+ GUID['803982ab-370a-4f7e-a9e7-8784036a6e26'],
238
+
239
+ GetHeight: [[:pointer], :long],
240
+ LoadSettingsFromStream: [[:pointer], :long],
241
+ SaveSettingsToStream: [[:pointer], :long]
96
242
  ]
97
243
 
244
+ UIRibbon = COM::Instance[IUIRibbon]
245
+
246
+ UI_INVALIDATIONS_STATE = 0x00000001
247
+ UI_INVALIDATIONS_VALUE = 0x00000002
248
+ UI_INVALIDATIONS_PROPERTY = 0x00000004
249
+ UI_INVALIDATIONS_ALLPROPERTIES = 0x00000008
250
+
251
+ UI_ALL_COMMANDS = 0
252
+
98
253
  IUIFramework = COM::Interface[IUnknown,
99
- IID_IUIFramework,
254
+ GUID['F4F0385D-6872-43a8-AD09-4C339CB3F5C5'],
100
255
 
101
256
  Initialize: [[:pointer, :pointer], :long],
102
257
  Destroy: [[], :long],
@@ -109,8 +264,110 @@ module Fzeet
109
264
  SetModes: [[:int], :long]
110
265
  ]
111
266
 
267
+ UIFramework = COM::Factory[IUIFramework, GUID['926749fa-2615-4987-8845-c33e65f2b957']]
268
+
269
+ IUIContextualUI = COM::Interface[IUnknown,
270
+ GUID['EEA11F37-7C46-437c-8E55-B52122B29293'],
271
+
272
+ ShowAtLocation: [[:int, :int], :long]
273
+ ]
274
+
275
+ UIContextualUI = COM::Instance[IUIContextualUI]
276
+
277
+ IUICollection = COM::Interface[IUnknown,
278
+ GUID['DF4F45BF-6F9D-4dd7-9D68-D8F9CD18C4DB'],
279
+
280
+ GetCount: [[:pointer], :long],
281
+ GetItem: [[:uint, :pointer], :long],
282
+ Add: [[:pointer], :long],
283
+ Insert: [[:uint, :pointer], :long],
284
+ RemoveAt: [[:uint], :long],
285
+ Replace: [[:uint, :pointer], :long],
286
+ Clear: [[], :long]
287
+ ]
288
+
289
+ UICollection = COM::Instance[IUICollection]
290
+
291
+ UI_COLLECTIONCHANGE_INSERT = 0
292
+ UI_COLLECTIONCHANGE_REMOVE = 1
293
+ UI_COLLECTIONCHANGE_REPLACE = 2
294
+ UI_COLLECTIONCHANGE_RESET = 3
295
+
296
+ UI_COLLECTION_INVALIDINDEX = 0xffffffff
297
+
298
+ IUICollectionChangedEvent = COM::Interface[IUnknown,
299
+ GUID['6502AE91-A14D-44b5-BBD0-62AACC581D52'],
300
+
301
+ OnChanged: [[:int, :uint, :pointer, :uint, :pointer], :long]
302
+ ]
303
+
304
+ UICollectionChangedEvent = COM::Callback[IUICollectionChangedEvent]
305
+
306
+ UI_EXECUTIONVERB_EXECUTE = 0
307
+ UI_EXECUTIONVERB_PREVIEW = 1
308
+ UI_EXECUTIONVERB_CANCELPREVIEW = 2
309
+
310
+ IUICommandHandler = COM::Interface[IUnknown,
311
+ GUID['75ae0a2d-dc03-4c9f-8883-069660d0beb6'],
312
+
313
+ Execute: [[:uint, :int, :pointer, :pointer, :pointer], :long],
314
+ UpdateProperty: [[:uint, :pointer, :pointer, :pointer], :long]
315
+ ]
316
+
112
317
  UICommandHandler = COM::Callback[IUICommandHandler]
318
+
319
+ UI_COMMANDTYPE_UNKNOWN = 0
320
+ UI_COMMANDTYPE_GROUP = 1
321
+ UI_COMMANDTYPE_ACTION = 2
322
+ UI_COMMANDTYPE_ANCHOR = 3
323
+ UI_COMMANDTYPE_CONTEXT = 4
324
+ UI_COMMANDTYPE_COLLECTION = 5
325
+ UI_COMMANDTYPE_COMMANDCOLLECTION = 6
326
+ UI_COMMANDTYPE_DECIMAL = 7
327
+ UI_COMMANDTYPE_BOOLEAN = 8
328
+ UI_COMMANDTYPE_FONT = 9
329
+ UI_COMMANDTYPE_RECENTITEMS = 10
330
+ UI_COMMANDTYPE_COLORANCHOR = 11
331
+ UI_COMMANDTYPE_COLORCOLLECTION = 12
332
+
333
+ UI_VIEWTYPE_RIBBON = 1
334
+
335
+ UI_VIEWVERB_CREATE = 0
336
+ UI_VIEWVERB_DESTROY = 1
337
+ UI_VIEWVERB_SIZE = 2
338
+ UI_VIEWVERB_ERROR = 3
339
+
340
+ IUIApplication = COM::Interface[IUnknown,
341
+ GUID['D428903C-729A-491d-910D-682A08FF2522'],
342
+
343
+ OnViewChanged: [[:uint, :int, :pointer, :int, :int], :long],
344
+ OnCreateUICommand: [[:uint, :int, :pointer], :long],
345
+ OnDestroyUICommand: [[:uint, :int, :pointer], :long]
346
+ ]
347
+
113
348
  UIApplication = COM::Callback[IUIApplication]
114
- UIFramework = COM::Factory[IUIFramework, CLSID_UIRibbonFramework]
349
+
350
+ IUIImage = COM::Interface[IUnknown,
351
+ GUID['23c8c838-4de6-436b-ab01-5554bb7c30dd'],
352
+
353
+ GetBitmap: [[:pointer], :long]
354
+ ]
355
+
356
+ UIImage = COM::Instance[IUIImage]
357
+
358
+ UI_OWNERSHIP_TRANSFER = 0
359
+ UI_OWNERSHIP_COPY = 1
360
+
361
+ IUIImageFromBitmap = COM::Interface[IUnknown,
362
+ GUID['18aba7f3-4c1c-4ba2-bf6c-f5c3326fa816'],
363
+
364
+ CreateImage: [[:pointer, :int, :pointer], :long]
365
+ ]
366
+
367
+ UIImageFromBitmap = COM::Factory[IUIImageFromBitmap, GUID['0f7434b6-59b6-4250-999e-d168d6ae4293']]
368
+
369
+ def UI_MAKEAPPMODE(x) 1 << x end
370
+
371
+ module_function :UI_MAKEAPPMODE
115
372
  end
116
373
  end
@@ -0,0 +1,182 @@
1
+ require_relative 'Common'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ FVIRTKEY = 1
6
+ FNOINVERT = 0x02
7
+ FSHIFT = 0x04
8
+ FCONTROL = 0x08
9
+ FALT = 0x10
10
+
11
+ VK_LBUTTON = 0x01
12
+ VK_RBUTTON = 0x02
13
+ VK_CANCEL = 0x03
14
+ VK_MBUTTON = 0x04
15
+ VK_XBUTTON1 = 0x05
16
+ VK_XBUTTON2 = 0x06
17
+ VK_BACK = 0x08
18
+ VK_TAB = 0x09
19
+ VK_CLEAR = 0x0C
20
+ VK_RETURN = 0x0D
21
+ VK_SHIFT = 0x10
22
+ VK_CONTROL = 0x11
23
+ VK_MENU = 0x12
24
+ VK_PAUSE = 0x13
25
+ VK_CAPITAL = 0x14
26
+ VK_KANA = 0x15
27
+ VK_HANGEUL = 0x15
28
+ VK_HANGUL = 0x15
29
+ VK_JUNJA = 0x17
30
+ VK_FINAL = 0x18
31
+ VK_HANJA = 0x19
32
+ VK_KANJI = 0x19
33
+ VK_ESCAPE = 0x1B
34
+ VK_CONVERT = 0x1C
35
+ VK_NONCONVERT = 0x1D
36
+ VK_ACCEPT = 0x1E
37
+ VK_MODECHANGE = 0x1F
38
+ VK_SPACE = 0x20
39
+ VK_PRIOR = 0x21
40
+ VK_NEXT = 0x22
41
+ VK_END = 0x23
42
+ VK_HOME = 0x24
43
+ VK_LEFT = 0x25
44
+ VK_UP = 0x26
45
+ VK_RIGHT = 0x27
46
+ VK_DOWN = 0x28
47
+ VK_SELECT = 0x29
48
+ VK_PRINT = 0x2A
49
+ VK_EXECUTE = 0x2B
50
+ VK_SNAPSHOT = 0x2C
51
+ VK_INSERT = 0x2D
52
+ VK_DELETE = 0x2E
53
+ VK_HELP = 0x2F
54
+ VK_LWIN = 0x5B
55
+ VK_RWIN = 0x5C
56
+ VK_APPS = 0x5D
57
+ VK_SLEEP = 0x5F
58
+ VK_NUMPAD0 = 0x60
59
+ VK_NUMPAD1 = 0x61
60
+ VK_NUMPAD2 = 0x62
61
+ VK_NUMPAD3 = 0x63
62
+ VK_NUMPAD4 = 0x64
63
+ VK_NUMPAD5 = 0x65
64
+ VK_NUMPAD6 = 0x66
65
+ VK_NUMPAD7 = 0x67
66
+ VK_NUMPAD8 = 0x68
67
+ VK_NUMPAD9 = 0x69
68
+ VK_MULTIPLY = 0x6A
69
+ VK_ADD = 0x6B
70
+ VK_SEPARATOR = 0x6C
71
+ VK_SUBTRACT = 0x6D
72
+ VK_DECIMAL = 0x6E
73
+ VK_DIVIDE = 0x6F
74
+ VK_F1 = 0x70
75
+ VK_F2 = 0x71
76
+ VK_F3 = 0x72
77
+ VK_F4 = 0x73
78
+ VK_F5 = 0x74
79
+ VK_F6 = 0x75
80
+ VK_F7 = 0x76
81
+ VK_F8 = 0x77
82
+ VK_F9 = 0x78
83
+ VK_F10 = 0x79
84
+ VK_F11 = 0x7A
85
+ VK_F12 = 0x7B
86
+ VK_F13 = 0x7C
87
+ VK_F14 = 0x7D
88
+ VK_F15 = 0x7E
89
+ VK_F16 = 0x7F
90
+ VK_F17 = 0x80
91
+ VK_F18 = 0x81
92
+ VK_F19 = 0x82
93
+ VK_F20 = 0x83
94
+ VK_F21 = 0x84
95
+ VK_F22 = 0x85
96
+ VK_F23 = 0x86
97
+ VK_F24 = 0x87
98
+ VK_NUMLOCK = 0x90
99
+ VK_SCROLL = 0x91
100
+ VK_OEM_NEC_EQUAL = 0x92
101
+ VK_OEM_FJ_JISHO = 0x92
102
+ VK_OEM_FJ_MASSHOU = 0x93
103
+ VK_OEM_FJ_TOUROKU = 0x94
104
+ VK_OEM_FJ_LOYA = 0x95
105
+ VK_OEM_FJ_ROYA = 0x96
106
+ VK_LSHIFT = 0xA0
107
+ VK_RSHIFT = 0xA1
108
+ VK_LCONTROL = 0xA2
109
+ VK_RCONTROL = 0xA3
110
+ VK_LMENU = 0xA4
111
+ VK_RMENU = 0xA5
112
+ VK_BROWSER_BACK = 0xA6
113
+ VK_BROWSER_FORWARD = 0xA7
114
+ VK_BROWSER_REFRESH = 0xA8
115
+ VK_BROWSER_STOP = 0xA9
116
+ VK_BROWSER_SEARCH = 0xAA
117
+ VK_BROWSER_FAVORITES = 0xAB
118
+ VK_BROWSER_HOME = 0xAC
119
+ VK_VOLUME_MUTE = 0xAD
120
+ VK_VOLUME_DOWN = 0xAE
121
+ VK_VOLUME_UP = 0xAF
122
+ VK_MEDIA_NEXT_TRACK = 0xB0
123
+ VK_MEDIA_PREV_TRACK = 0xB1
124
+ VK_MEDIA_STOP = 0xB2
125
+ VK_MEDIA_PLAY_PAUSE = 0xB3
126
+ VK_LAUNCH_MAIL = 0xB4
127
+ VK_LAUNCH_MEDIA_SELECT = 0xB5
128
+ VK_LAUNCH_APP1 = 0xB6
129
+ VK_LAUNCH_APP2 = 0xB7
130
+ VK_OEM_1 = 0xBA
131
+ VK_OEM_PLUS = 0xBB
132
+ VK_OEM_COMMA = 0xBC
133
+ VK_OEM_MINUS = 0xBD
134
+ VK_OEM_PERIOD = 0xBE
135
+ VK_OEM_2 = 0xBF
136
+ VK_OEM_3 = 0xC0
137
+ VK_OEM_4 = 0xDB
138
+ VK_OEM_5 = 0xDC
139
+ VK_OEM_6 = 0xDD
140
+ VK_OEM_7 = 0xDE
141
+ VK_OEM_8 = 0xDF
142
+ VK_OEM_AX = 0xE1
143
+ VK_OEM_102 = 0xE2
144
+ VK_ICO_HELP = 0xE3
145
+ VK_ICO_00 = 0xE4
146
+ VK_PROCESSKEY = 0xE5
147
+ VK_ICO_CLEAR = 0xE6
148
+ VK_PACKET = 0xE7
149
+ VK_OEM_RESET = 0xE9
150
+ VK_OEM_JUMP = 0xEA
151
+ VK_OEM_PA1 = 0xEB
152
+ VK_OEM_PA2 = 0xEC
153
+ VK_OEM_PA3 = 0xED
154
+ VK_OEM_WSCTRL = 0xEE
155
+ VK_OEM_CUSEL = 0xEF
156
+ VK_OEM_ATTN = 0xF0
157
+ VK_OEM_FINISH = 0xF1
158
+ VK_OEM_COPY = 0xF2
159
+ VK_OEM_AUTO = 0xF3
160
+ VK_OEM_ENLW = 0xF4
161
+ VK_OEM_BACKTAB = 0xF5
162
+ VK_ATTN = 0xF6
163
+ VK_CRSEL = 0xF7
164
+ VK_EXSEL = 0xF8
165
+ VK_EREOF = 0xF9
166
+ VK_PLAY = 0xFA
167
+ VK_ZOOM = 0xFB
168
+ VK_NONAME = 0xFC
169
+ VK_PA1 = 0xFD
170
+ VK_OEM_CLEAR = 0xFE
171
+
172
+ class ACCEL < FFI::Struct
173
+ layout \
174
+ :fVirt, :uchar,
175
+ :key, :ushort,
176
+ :cmd, :ushort
177
+ end
178
+
179
+ attach_function :CreateAcceleratorTable, :CreateAcceleratorTableA, [:pointer, :int], :pointer
180
+ attach_function :DestroyAcceleratorTable, [:pointer], :int
181
+ end
182
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../common'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ ffi_lib 'user32'
6
+ ffi_convention :stdcall
7
+
8
+ if WINVER.AtLeastWindowsVista?
9
+ attach_function :SetProcessDPIAware, [], :int
10
+ end
11
+
12
+ IMAGE_BITMAP = 0
13
+ IMAGE_ICON = 1
14
+ IMAGE_CURSOR = 2
15
+ IMAGE_ENHMETAFILE = 3
16
+
17
+ LR_DEFAULTCOLOR = 0x00000000
18
+ LR_MONOCHROME = 0x00000001
19
+ LR_COLOR = 0x00000002
20
+ LR_COPYRETURNORG = 0x00000004
21
+ LR_COPYDELETEORG = 0x00000008
22
+ LR_LOADFROMFILE = 0x00000010
23
+ LR_LOADTRANSPARENT = 0x00000020
24
+ LR_DEFAULTSIZE = 0x00000040
25
+ LR_VGACOLOR = 0x00000080
26
+ LR_LOADMAP3DCOLORS = 0x00001000
27
+ LR_CREATEDIBSECTION = 0x00002000
28
+ LR_COPYFROMRESOURCE = 0x00004000
29
+ LR_SHARED = 0x00008000
30
+
31
+ attach_function :LoadImage, :LoadImageA, [:pointer, :string, :uint, :int, :int, :uint], :pointer
32
+ end
33
+ end
@@ -1,4 +1,4 @@
1
- require_relative 'userctlcommon'
1
+ require_relative 'Common'
2
2
 
3
3
  module Fzeet
4
4
  module Windows
@@ -1,4 +1,4 @@
1
- require_relative 'usercommon'
1
+ require_relative '../Common'
2
2
 
3
3
  module Fzeet
4
4
  module Windows
@@ -0,0 +1 @@
1
+ require_relative 'Control/Button'
@@ -0,0 +1,115 @@
1
+ require_relative 'Common'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ attach_function :CreateMenu, [], :pointer
6
+ attach_function :CreatePopupMenu, [], :pointer
7
+ attach_function :DestroyMenu, [:pointer], :int
8
+
9
+ MF_INSERT = 0x00000000
10
+ MF_CHANGE = 0x00000080
11
+ MF_APPEND = 0x00000100
12
+ MF_DELETE = 0x00000200
13
+ MF_REMOVE = 0x00001000
14
+ MF_BYCOMMAND = 0x00000000
15
+ MF_BYPOSITION = 0x00000400
16
+ MF_SEPARATOR = 0x00000800
17
+ MF_ENABLED = 0x00000000
18
+ MF_GRAYED = 0x00000001
19
+ MF_DISABLED = 0x00000002
20
+ MF_UNCHECKED = 0x00000000
21
+ MF_CHECKED = 0x00000008
22
+ MF_USECHECKBITMAPS = 0x00000200
23
+ MF_STRING = 0x00000000
24
+ MF_BITMAP = 0x00000004
25
+ MF_OWNERDRAW = 0x00000100
26
+ MF_POPUP = 0x00000010
27
+ MF_MENUBARBREAK = 0x00000020
28
+ MF_MENUBREAK = 0x00000040
29
+ MF_UNHILITE = 0x00000000
30
+ MF_HILITE = 0x00000080
31
+ MF_DEFAULT = 0x00001000
32
+ MF_SYSMENU = 0x00002000
33
+ MF_HELP = 0x00004000
34
+ MF_RIGHTJUSTIFY = 0x00004000
35
+ MF_MOUSESELECT = 0x00008000
36
+ MF_END = 0x00000080
37
+
38
+ MFT_STRING = MF_STRING
39
+ MFT_BITMAP = MF_BITMAP
40
+ MFT_MENUBARBREAK = MF_MENUBARBREAK
41
+ MFT_MENUBREAK = MF_MENUBREAK
42
+ MFT_OWNERDRAW = MF_OWNERDRAW
43
+ MFT_RADIOCHECK = 0x00000200
44
+ MFT_SEPARATOR = MF_SEPARATOR
45
+ MFT_RIGHTORDER = 0x00002000
46
+ MFT_RIGHTJUSTIFY = MF_RIGHTJUSTIFY
47
+
48
+ MFS_GRAYED = 0x00000003
49
+ MFS_DISABLED = MFS_GRAYED
50
+ MFS_CHECKED = MF_CHECKED
51
+ MFS_HILITE = MF_HILITE
52
+ MFS_ENABLED = MF_ENABLED
53
+ MFS_UNCHECKED = MF_UNCHECKED
54
+ MFS_UNHILITE = MF_UNHILITE
55
+ MFS_DEFAULT = MF_DEFAULT
56
+
57
+ attach_function :AppendMenu, :AppendMenuA, [:pointer, :uint, :uint, :string], :int
58
+ attach_function :GetMenuState, [:pointer, :uint, :uint], :uint
59
+ attach_function :EnableMenuItem, [:pointer, :uint, :uint], :int
60
+ attach_function :CheckMenuItem, [:pointer, :uint, :uint], :ulong
61
+ attach_function :CheckMenuRadioItem, [:pointer, :uint, :uint, :uint, :uint], :int
62
+
63
+ MIIM_STATE = 0x00000001
64
+ MIIM_ID = 0x00000002
65
+ MIIM_SUBMENU = 0x00000004
66
+ MIIM_CHECKMARKS = 0x00000008
67
+ MIIM_TYPE = 0x00000010
68
+ MIIM_DATA = 0x00000020
69
+ MIIM_STRING = 0x00000040
70
+ MIIM_BITMAP = 0x00000080
71
+ MIIM_FTYPE = 0x00000100
72
+
73
+ class MENUITEMINFO < FFI::Struct
74
+ layout \
75
+ :cbSize, :uint,
76
+ :fMask, :uint,
77
+ :fType, :uint,
78
+ :fState, :uint,
79
+ :wID, :uint,
80
+ :hSubMenu, :pointer,
81
+ :hbmpChecked, :pointer,
82
+ :hbmpUnchecked, :pointer,
83
+ :dwItemData, :ulong,
84
+ :dwTypeData, :pointer,
85
+ :cch, :uint,
86
+ :hbmpItem, :pointer
87
+ end
88
+
89
+ attach_function :GetMenuItemInfo, :GetMenuItemInfoA, [:pointer, :uint, :int, :pointer], :int
90
+ attach_function :SetMenuItemInfo, :SetMenuItemInfoA, [:pointer, :uint, :int, :pointer], :int
91
+
92
+ TPM_LEFTBUTTON = 0x0000
93
+ TPM_RIGHTBUTTON = 0x0002
94
+ TPM_LEFTALIGN = 0x0000
95
+ TPM_CENTERALIGN = 0x0004
96
+ TPM_RIGHTALIGN = 0x0008
97
+ TPM_TOPALIGN = 0x0000
98
+ TPM_VCENTERALIGN = 0x0010
99
+ TPM_BOTTOMALIGN = 0x0020
100
+ TPM_HORIZONTAL = 0x0000
101
+ TPM_VERTICAL = 0x0040
102
+ TPM_NONOTIFY = 0x0080
103
+ TPM_RETURNCMD = 0x0100
104
+ TPM_RECURSE = 0x0001
105
+ TPM_HORPOSANIMATION = 0x0400
106
+ TPM_HORNEGANIMATION = 0x0800
107
+ TPM_VERPOSANIMATION = 0x1000
108
+ TPM_VERNEGANIMATION = 0x2000
109
+ TPM_NOANIMATION = 0x4000
110
+ TPM_LAYOUTRTL = 0x8000
111
+ TPM_WORKAREA = 0x10000
112
+
113
+ attach_function :TrackPopupMenu, [:pointer, :uint, :int, :int, :int, :pointer, :pointer], :int
114
+ end
115
+ end
@@ -1,8 +1,7 @@
1
- require_relative 'usercommon'
1
+ require_relative 'Common'
2
2
 
3
3
  module Fzeet
4
4
  module Windows
5
- #{ WM_xxx
6
5
  WM_NULL = 0x0000
7
6
  WM_CREATE = 0x0001
8
7
  WM_DESTROY = 0x0002
@@ -236,7 +235,6 @@ module Fzeet
236
235
  WM_PENWINLAST = 0x038F
237
236
  WM_APP = 0x8000
238
237
  WM_USER = 0x0400
239
- #}
240
238
 
241
239
  class MSG < FFI::Struct
242
240
  layout \