fzeet 0.5.3 → 0.6.0

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 (91) hide show
  1. data/examples/Command.rbw +2 -2
  2. data/examples/Control/Button.rbw +33 -11
  3. data/examples/Control/ComboBox.rbw +30 -0
  4. data/examples/Control/ComboBoxEx.rbw +30 -0
  5. data/examples/Control/DateTimePicker.rbw +9 -0
  6. data/examples/Control/Edit.rbw +18 -0
  7. data/examples/Control/Header.rbw +9 -0
  8. data/examples/Control/ListBox.rbw +30 -0
  9. data/examples/Control/ListView.rbw +11 -0
  10. data/examples/Control/MonthCalendar.rbw +9 -0
  11. data/examples/Control/ProgressBar.rbw +22 -0
  12. data/examples/Control/PropertySheet.rbw +50 -0
  13. data/examples/Control/Static.rbw +14 -0
  14. data/examples/Control/SysLink.rbw +9 -0
  15. data/examples/Control/TreeView.rbw +28 -0
  16. data/examples/Control/UpDown.rbw +12 -0
  17. data/examples/Dialog/Dialog.rbw +9 -9
  18. data/examples/Dialog/DialogApplication.rbw +1 -1
  19. data/examples/Menu/ContextMenu.rbw +3 -1
  20. data/examples/Menu/MenuPARGB32.rbw +6 -6
  21. data/examples/Paint.rbw +9 -0
  22. data/examples/UIRibbon/ContextPopup.rbw +7 -4
  23. data/examples/UIRibbon/Control/Button.dll +0 -0
  24. data/examples/UIRibbon/Control/Button.rb +91 -0
  25. data/examples/UIRibbon/Control/Button.rbw +20 -0
  26. data/examples/UIRibbon/Control/Button.xml +247 -0
  27. data/examples/UIRibbon/Size.rbw +13 -0
  28. data/examples/res/audio-volume-muted-big.bmp +0 -0
  29. data/examples/res/audio-volume-muted-small.bmp +0 -0
  30. data/examples/res/audio-volume-muted.bmp +0 -0
  31. data/examples/res/go-down-big.bmp +0 -0
  32. data/examples/res/go-down-small.bmp +0 -0
  33. data/examples/res/go-down.bmp +0 -0
  34. data/examples/res/go-jump-big.bmp +0 -0
  35. data/examples/res/go-jump-small.bmp +0 -0
  36. data/examples/res/go-jump.bmp +0 -0
  37. data/examples/res/media-playback-pause-big.bmp +0 -0
  38. data/examples/res/media-playback-pause-small.bmp +0 -0
  39. data/examples/res/media-playback-pause.bmp +0 -0
  40. data/lib/fzeet/Application.rb +4 -2
  41. data/lib/fzeet/Common.rb +44 -2
  42. data/lib/fzeet/Control/Button.rb +17 -0
  43. data/lib/fzeet/Control/ComboBox.rb +46 -0
  44. data/lib/fzeet/Control/ComboBoxEx.rb +35 -0
  45. data/lib/fzeet/Control/Common.rb +2 -0
  46. data/lib/fzeet/Control/DateTimePicker.rb +38 -0
  47. data/lib/fzeet/Control/Edit.rb +53 -0
  48. data/lib/fzeet/Control/Header.rb +46 -0
  49. data/lib/fzeet/Control/ListBox.rb +72 -0
  50. data/lib/fzeet/Control/ListView.rb +90 -0
  51. data/lib/fzeet/Control/MonthCalendar.rb +38 -0
  52. data/lib/fzeet/Control/ProgressBar.rb +40 -0
  53. data/lib/fzeet/Control/Static.rb +34 -0
  54. data/lib/fzeet/Control/SysLink.rb +40 -0
  55. data/lib/fzeet/Control/TreeView.rb +32 -0
  56. data/lib/fzeet/Control/UpDown.rb +36 -0
  57. data/lib/fzeet/Control.rb +13 -0
  58. data/lib/fzeet/UIRibbon.rb +91 -31
  59. data/lib/fzeet/Window/Common.rb +22 -1
  60. data/lib/fzeet/Window/View.rb +15 -0
  61. data/lib/fzeet/Window/WindowMethods.rb +26 -1
  62. data/lib/fzeet/Window.rb +1 -0
  63. data/lib/fzeet/windows/comctl/Button.rb +3 -0
  64. data/lib/fzeet/windows/comctl/ComboBox.rb +12 -0
  65. data/lib/fzeet/windows/comctl/ComboBoxEx.rb +65 -0
  66. data/lib/fzeet/windows/comctl/Common.rb +52 -1
  67. data/lib/fzeet/windows/comctl/DateTimePicker.rb +54 -0
  68. data/lib/fzeet/windows/comctl/Edit.rb +20 -0
  69. data/lib/fzeet/windows/comctl/Header.rb +128 -0
  70. data/lib/fzeet/windows/comctl/ListView.rb +317 -0
  71. data/lib/fzeet/windows/comctl/MonthCalendar.rb +62 -0
  72. data/lib/fzeet/windows/comctl/ProgressBar.rb +31 -0
  73. data/lib/fzeet/windows/comctl/PropertySheet.rb +205 -0
  74. data/lib/fzeet/windows/comctl/SysLink.rb +34 -0
  75. data/lib/fzeet/windows/comctl/TreeView.rb +198 -0
  76. data/lib/fzeet/windows/comctl/UpDown.rb +43 -0
  77. data/lib/fzeet/windows/comctl.rb +12 -0
  78. data/lib/fzeet/windows/common.rb +74 -2
  79. data/lib/fzeet/windows/gdi.rb +2 -0
  80. data/lib/fzeet/windows/libc.rb +4 -0
  81. data/lib/fzeet/windows/ole.rb +0 -22
  82. data/lib/fzeet/windows/shell/Common.rb +2 -0
  83. data/lib/fzeet/windows/user/Control/Button.rb +6 -0
  84. data/lib/fzeet/windows/user/Control/ComboBox.rb +72 -0
  85. data/lib/fzeet/windows/user/Control/Common.rb +1 -1
  86. data/lib/fzeet/windows/user/Control/Edit.rb +71 -0
  87. data/lib/fzeet/windows/user/Control/ListBox.rb +78 -0
  88. data/lib/fzeet/windows/user/Control/Static.rb +49 -0
  89. data/lib/fzeet/windows/user/Control.rb +4 -0
  90. data/lib/fzeet/windows/user/Window.rb +47 -0
  91. metadata +66 -4
@@ -0,0 +1,62 @@
1
+ require_relative 'Common'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ MCS_DAYSTATE = 0x0001
6
+ MCS_MULTISELECT = 0x0002
7
+ MCS_WEEKNUMBERS = 0x0004
8
+ MCS_NOTODAYCIRCLE = 0x0008
9
+ MCS_NOTODAY = 0x0010
10
+ MCS_NOTRAILINGDATES = 0x0040
11
+ MCS_SHORTDAYSOFWEEK = 0x0080
12
+ MCS_NOSELCHANGEONNAV = 0x0100
13
+
14
+ MCM_FIRST = 0x1000
15
+ MCM_GETCURSEL = MCM_FIRST + 1
16
+ MCM_SETCURSEL = MCM_FIRST + 2
17
+ MCM_GETMAXSELCOUNT = MCM_FIRST + 3
18
+ MCM_SETMAXSELCOUNT = MCM_FIRST + 4
19
+ MCM_GETSELRANGE = MCM_FIRST + 5
20
+ MCM_SETSELRANGE = MCM_FIRST + 6
21
+ MCM_GETMONTHRANGE = MCM_FIRST + 7
22
+ MCM_SETDAYSTATE = MCM_FIRST + 8
23
+ MCM_GETMINREQRECT = MCM_FIRST + 9
24
+ MCM_SETCOLOR = MCM_FIRST + 10
25
+ MCM_GETCOLOR = MCM_FIRST + 11
26
+ MCM_SETTODAY = MCM_FIRST + 12
27
+ MCM_GETTODAY = MCM_FIRST + 13
28
+ MCM_HITTEST = MCM_FIRST + 14
29
+ MCM_SETFIRSTDAYOFWEEK = MCM_FIRST + 15
30
+ MCM_GETFIRSTDAYOFWEEK = MCM_FIRST + 16
31
+ MCM_GETRANGE = MCM_FIRST + 17
32
+ MCM_SETRANGE = MCM_FIRST + 18
33
+ MCM_GETMONTHDELTA = MCM_FIRST + 19
34
+ MCM_SETMONTHDELTA = MCM_FIRST + 20
35
+ MCM_GETMAXTODAYWIDTH = MCM_FIRST + 21
36
+ MCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
37
+ MCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
38
+ MCM_GETCURRENTVIEW = MCM_FIRST + 22
39
+ MCM_GETCALENDARCOUNT = MCM_FIRST + 23
40
+ MCM_GETCALENDARGRIDINFO = MCM_FIRST + 24
41
+ MCM_GETCALID = MCM_FIRST + 27
42
+ MCM_SETCALID = MCM_FIRST + 28
43
+ MCM_SIZERECTTOMIN = MCM_FIRST + 29
44
+ MCM_SETCALENDARBORDER = MCM_FIRST + 30
45
+ MCM_GETCALENDARBORDER = MCM_FIRST + 31
46
+ MCM_SETCURRENTVIEW = MCM_FIRST + 32
47
+
48
+ MCN_FIRST = 0x1_0000_0000 - 746
49
+ MCN_LAST = 0x1_0000_0000 - 752
50
+ MCN_SELCHANGE = MCN_FIRST - 3
51
+ MCN_GETDAYSTATE = MCN_FIRST - 1
52
+ MCN_SELECT = MCN_FIRST
53
+ MCN_VIEWCHANGE = MCN_FIRST - 4
54
+
55
+ class NMSELCHANGE < FFI::Struct
56
+ layout \
57
+ :nmhdr, NMHDR,
58
+ :stSelStart, SYSTEMTIME,
59
+ :stSelEnd, SYSTEMTIME
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,31 @@
1
+ require_relative 'Common'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ PBS_SMOOTH = 0x01
6
+ PBS_VERTICAL = 0x04
7
+ PBS_MARQUEE = 0x08
8
+ PBS_SMOOTHREVERSE = 0x10
9
+
10
+ PBM_SETRANGE = WM_USER + 1
11
+ PBM_SETPOS = WM_USER + 2
12
+ PBM_DELTAPOS = WM_USER + 3
13
+ PBM_SETSTEP = WM_USER + 4
14
+ PBM_STEPIT = WM_USER + 5
15
+ PBM_SETRANGE32 = WM_USER + 6
16
+ PBM_GETRANGE = WM_USER + 7
17
+ PBM_GETPOS = WM_USER + 8
18
+ PBM_SETBARCOLOR = WM_USER + 9
19
+ PBM_SETBKCOLOR = CCM_SETBKCOLOR
20
+ PBM_SETMARQUEE = WM_USER + 10
21
+ PBM_GETSTEP = WM_USER + 13
22
+ PBM_GETBKCOLOR = WM_USER + 14
23
+ PBM_GETBARCOLOR = WM_USER + 15
24
+ PBM_SETSTATE = WM_USER + 16
25
+ PBM_GETSTATE = WM_USER + 17
26
+
27
+ PBST_NORMAL = 0x0001
28
+ PBST_ERROR = 0x0002
29
+ PBST_PAUSED = 0x0003
30
+ end
31
+ end
@@ -0,0 +1,205 @@
1
+ require_relative 'Common'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ PSP_DEFAULT = 0x00000000
6
+ PSP_DLGINDIRECT = 0x00000001
7
+ PSP_USEHICON = 0x00000002
8
+ PSP_USEICONID = 0x00000004
9
+ PSP_USETITLE = 0x00000008
10
+ PSP_RTLREADING = 0x00000010
11
+ PSP_HASHELP = 0x00000020
12
+ PSP_USEREFPARENT = 0x00000040
13
+ PSP_USECALLBACK = 0x00000080
14
+ PSP_PREMATURE = 0x00000400
15
+ PSP_HIDEHEADER = 0x00000800
16
+ PSP_USEHEADERTITLE = 0x00001000
17
+ PSP_USEHEADERSUBTITLE = 0x00002000
18
+ PSP_USEFUSIONCONTEXT = 0x00004000
19
+
20
+ callback :PSPCALLBACK, [:pointer, :uint, :pointer], :uint
21
+
22
+ class PROPSHEETPAGE < FFI::Struct
23
+ layout *[
24
+ :dwSize, :ulong,
25
+ :dwFlags, :ulong,
26
+ :hInstance, :pointer,
27
+ :template, Class.new(FFI::Union) {
28
+ layout \
29
+ :pszTemplate, :pointer,
30
+ :pResource, :pointer
31
+ },
32
+ :icon, Class.new(FFI::Union) {
33
+ layout \
34
+ :hIcon, :pointer,
35
+ :pszIcon, :pointer
36
+ },
37
+ :pszTitle, :pointer,
38
+ :pfnDlgProc, :DLGPROC,
39
+ :lParam, :long,
40
+ :pfnCallback, :PSPCALLBACK,
41
+ :pcRefParent, :pointer,
42
+ :pszHeaderTitle, :pointer,
43
+ :pszHeaderSubTitle, :pointer,
44
+ (WINVER.AtLeastWindowsXP?) ? [
45
+ :hActCtx, :pointer
46
+ ] : nil,
47
+ (WINVER.AtLeastWindowsVista?) ? [
48
+ :header, Class.new(FFI::Union) {
49
+ layout \
50
+ :hbmHeader, :pointer,
51
+ :pszbmHeader, :pointer
52
+ }
53
+ ] : nil
54
+ ].flatten.compact
55
+ end
56
+
57
+ attach_function :CreatePropertySheetPage, :CreatePropertySheetPageA, [:pointer], :pointer
58
+ attach_function :DestroyPropertySheetPage, [:pointer], :int
59
+
60
+ PSH_DEFAULT = 0x00000000
61
+ PSH_PROPTITLE = 0x00000001
62
+ PSH_USEHICON = 0x00000002
63
+ PSH_USEICONID = 0x00000004
64
+ PSH_PROPSHEETPAGE = 0x00000008
65
+ PSH_WIZARDHASFINISH = 0x00000010
66
+ PSH_WIZARD = 0x00000020
67
+ PSH_USEPSTARTPAGE = 0x00000040
68
+ PSH_NOAPPLYNOW = 0x00000080
69
+ PSH_USECALLBACK = 0x00000100
70
+ PSH_HASHELP = 0x00000200
71
+ PSH_MODELESS = 0x00000400
72
+ PSH_RTLREADING = 0x00000800
73
+ PSH_WIZARDCONTEXTHELP = 0x00001000
74
+ PSH_WIZARD97 = 0x01000000
75
+ PSH_WATERMARK = 0x00008000
76
+ PSH_USEHBMWATERMARK = 0x00010000
77
+ PSH_USEHPLWATERMARK = 0x00020000
78
+ PSH_STRETCHWATERMARK = 0x00040000
79
+ PSH_HEADER = 0x00080000
80
+ PSH_USEHBMHEADER = 0x00100000
81
+ PSH_USEPAGELANG = 0x00200000
82
+ PSH_WIZARD_LITE = 0x00400000
83
+ PSH_NOCONTEXTHELP = 0x02000000
84
+ PSH_AEROWIZARD = 0x00004000
85
+ PSH_RESIZABLE = 0x04000000
86
+ PSH_HEADERBITMAP = 0x08000000
87
+ PSH_NOMARGIN = 0x10000000
88
+
89
+ callback :PROPSHEETCALLBACK, [:pointer, :uint, :long], :int
90
+
91
+ class PROPSHEETHEADER < FFI::Struct
92
+ layout \
93
+ :dwSize, :ulong,
94
+ :dwFlags, :ulong,
95
+ :hwndParent, :pointer,
96
+ :hInstance, :pointer,
97
+ :icon, Class.new(FFI::Union) {
98
+ layout \
99
+ :hIcon, :pointer,
100
+ :pszIcon, :pointer
101
+ },
102
+ :pszCaption, :pointer,
103
+ :nPages, :uint,
104
+ :start, Class.new(FFI::Union) {
105
+ layout \
106
+ :nStartPage, :uint,
107
+ :pStartPage, :pointer
108
+ },
109
+ :pages, Class.new(FFI::Union) {
110
+ layout \
111
+ :ppsp, :pointer,
112
+ :phpage, :pointer
113
+ },
114
+ :pfnCallback, :PROPSHEETCALLBACK,
115
+ :watermark, Class.new(FFI::Union) {
116
+ layout \
117
+ :hbmWatermark, :pointer,
118
+ :pszbmWatermark, :pointer
119
+ },
120
+ :hplWatermark, :pointer,
121
+ :header, Class.new(FFI::Union) {
122
+ layout \
123
+ :hbmHeader, :pointer,
124
+ :pszbmHeader, :pointer
125
+ }
126
+ end
127
+
128
+ attach_function :PropertySheet, :PropertySheetA, [:pointer], :int
129
+
130
+ PSM_SETCURSEL = WM_USER + 101
131
+ PSM_REMOVEPAGE = WM_USER + 102
132
+ PSM_ADDPAGE = WM_USER + 103
133
+ PSM_CHANGED = WM_USER + 104
134
+ PSM_RESTARTWINDOWS = WM_USER + 105
135
+ PSM_REBOOTSYSTEM = WM_USER + 106
136
+ PSM_CANCELTOCLOSE = WM_USER + 107
137
+ PSM_QUERYSIBLINGS = WM_USER + 108
138
+ PSM_UNCHANGED = WM_USER + 109
139
+ PSM_APPLY = WM_USER + 110
140
+ PSM_SETTITLE = WM_USER + 111
141
+ PSM_SETWIZBUTTONS = WM_USER + 112
142
+ PSM_PRESSBUTTON = WM_USER + 113
143
+ PSM_SETCURSELID = WM_USER + 114
144
+ PSM_SETFINISHTEXT = WM_USER + 115
145
+ PSM_GETTABCONTROL = WM_USER + 116
146
+ PSM_ISDIALOGMESSAGE = WM_USER + 117
147
+ PSM_GETCURRENTPAGEHWND = WM_USER + 118
148
+ PSM_INSERTPAGE = WM_USER + 119
149
+ PSM_SETHEADERTITLE = WM_USER + 125
150
+ PSM_SETHEADERSUBTITLE = WM_USER + 127
151
+ PSM_HWNDTOINDEX = WM_USER + 129
152
+ PSM_INDEXTOHWND = WM_USER + 130
153
+ PSM_PAGETOINDEX = WM_USER + 131
154
+ PSM_INDEXTOPAGE = WM_USER + 132
155
+ PSM_IDTOINDEX = WM_USER + 133
156
+ PSM_INDEXTOID = WM_USER + 134
157
+ PSM_GETRESULT = WM_USER + 135
158
+ PSM_RECALCPAGESIZES = WM_USER + 136
159
+ PSM_SETNEXTTEXT = WM_USER + 137
160
+ PSM_SHOWWIZBUTTONS = WM_USER + 138
161
+ PSM_ENABLEWIZBUTTONS = WM_USER + 139
162
+ PSM_SETBUTTONTEXT = WM_USER + 140
163
+
164
+ PSWIZF_SETCOLOR = 0xffffffff
165
+
166
+ PSWIZB_BACK = 0x00000001
167
+ PSWIZB_NEXT = 0x00000002
168
+ PSWIZB_FINISH = 0x00000004
169
+ PSWIZB_DISABLEDFINISH = 0x00000008
170
+ PSWIZB_CANCEL = 0x00000010
171
+ PSWIZB_SHOW = 0
172
+ PSWIZB_RESTORE = 1
173
+
174
+ PSWIZBF_ELEVATIONREQUIRED = 0x00000001
175
+
176
+ PSBTN_BACK = 0
177
+ PSBTN_NEXT = 1
178
+ PSBTN_FINISH = 2
179
+ PSBTN_OK = 3
180
+ PSBTN_APPLYNOW = 4
181
+ PSBTN_CANCEL = 5
182
+ PSBTN_HELP = 6
183
+ PSBTN_MAX = 6
184
+
185
+ PSN_FIRST = 0x1_0000_0000 - 200
186
+ PSN_LAST = 0x1_0000_0000 - 299
187
+ PSN_SETACTIVE = PSN_FIRST - 0
188
+ PSN_KILLACTIVE = PSN_FIRST - 1
189
+ PSN_APPLY = PSN_FIRST - 2
190
+ PSN_RESET = PSN_FIRST - 3
191
+ PSN_HELP = PSN_FIRST - 5
192
+ PSN_WIZBACK = PSN_FIRST - 6
193
+ PSN_WIZNEXT = PSN_FIRST - 7
194
+ PSN_WIZFINISH = PSN_FIRST - 8
195
+ PSN_QUERYCANCEL = PSN_FIRST - 9
196
+ PSN_GETOBJECT = PSN_FIRST - 10
197
+ PSN_TRANSLATEACCELERATOR = PSN_FIRST - 12
198
+ PSN_QUERYINITIALFOCUS = PSN_FIRST - 13
199
+
200
+ PSNRET_NOERROR = 0
201
+ PSNRET_INVALID = 1
202
+ PSNRET_INVALID_NOCHANGEPAGE = 2
203
+ PSNRET_MESSAGEHANDLED = 3
204
+ end
205
+ end
@@ -0,0 +1,34 @@
1
+ require_relative 'Common'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ LWS_TRANSPARENT = 0x0001
6
+ LWS_IGNORERETURN = 0x0002
7
+ LWS_NOPREFIX = 0x0004
8
+ LWS_USEVISUALSTYLE = 0x0008
9
+ LWS_USECUSTOMTEXT = 0x0010
10
+ LWS_RIGHT = 0x0020
11
+
12
+ LM_HITTEST = WM_USER + 0x300
13
+ LM_GETIDEALHEIGHT = WM_USER + 0x301
14
+ LM_SETITEM = WM_USER + 0x302
15
+ LM_GETITEM = WM_USER + 0x303
16
+ LM_GETIDEALSIZE = LM_GETIDEALHEIGHT
17
+
18
+ class LITEM < FFI::Struct
19
+ layout \
20
+ :mask, :uint,
21
+ :iLink, :int,
22
+ :state, :uint,
23
+ :stateMask, :uint,
24
+ :szID, [:ushort, 48],
25
+ :szUrl, [:ushort, 2048 + 32 + 4]
26
+ end
27
+
28
+ class NMLINK < FFI::Struct
29
+ layout \
30
+ :hdr, NMHDR,
31
+ :item, LITEM
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,198 @@
1
+ require_relative 'Common'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ TVS_HASBUTTONS = 0x0001
6
+ TVS_HASLINES = 0x0002
7
+ TVS_LINESATROOT = 0x0004
8
+ TVS_EDITLABELS = 0x0008
9
+ TVS_DISABLEDRAGDROP = 0x0010
10
+ TVS_SHOWSELALWAYS = 0x0020
11
+ TVS_RTLREADING = 0x0040
12
+ TVS_NOTOOLTIPS = 0x0080
13
+ TVS_CHECKBOXES = 0x0100
14
+ TVS_TRACKSELECT = 0x0200
15
+ TVS_SINGLEEXPAND = 0x0400
16
+ TVS_INFOTIP = 0x0800
17
+ TVS_FULLROWSELECT = 0x1000
18
+ TVS_NOSCROLL = 0x2000
19
+ TVS_NONEVENHEIGHT = 0x4000
20
+ TVS_NOHSCROLL = 0x8000
21
+
22
+ TVS_EX_MULTISELECT = 0x0002
23
+ TVS_EX_DOUBLEBUFFER = 0x0004
24
+ TVS_EX_NOINDENTSTATE = 0x0008
25
+ TVS_EX_RICHTOOLTIP = 0x0010
26
+ TVS_EX_AUTOHSCROLL = 0x0020
27
+ TVS_EX_FADEINOUTEXPANDOS = 0x0040
28
+ TVS_EX_PARTIALCHECKBOXES = 0x0080
29
+ TVS_EX_EXCLUSIONCHECKBOXES = 0x0100
30
+ TVS_EX_DIMMEDCHECKBOXES = 0x0200
31
+ TVS_EX_DRAWIMAGEASYNC = 0x0400
32
+
33
+ TV_FIRST = 0x1100
34
+
35
+ TVM_INSERTITEM = TV_FIRST + 0
36
+ TVM_DELETEITEM = TV_FIRST + 1
37
+ TVM_EXPAND = TV_FIRST + 2
38
+ TVM_GETITEMRECT = TV_FIRST + 4
39
+ TVM_GETCOUNT = TV_FIRST + 5
40
+ TVM_GETINDENT = TV_FIRST + 6
41
+ TVM_SETINDENT = TV_FIRST + 7
42
+ TVM_GETIMAGELIST = TV_FIRST + 8
43
+ TVM_SETIMAGELIST = TV_FIRST + 9
44
+ TVM_GETNEXTITEM = TV_FIRST + 10
45
+ TVM_SELECTITEM = TV_FIRST + 11
46
+ TVM_GETITEM = TV_FIRST + 12
47
+ TVM_SETITEM = TV_FIRST + 13
48
+ TVM_EDITLABEL = TV_FIRST + 14
49
+ TVM_GETEDITCONTROL = TV_FIRST + 15
50
+ TVM_GETVISIBLECOUNT = TV_FIRST + 16
51
+ TVM_HITTEST = TV_FIRST + 17
52
+ TVM_CREATEDRAGIMAGE = TV_FIRST + 18
53
+ TVM_SORTCHILDREN = TV_FIRST + 19
54
+ TVM_ENSUREVISIBLE = TV_FIRST + 20
55
+ TVM_SORTCHILDRENCB = TV_FIRST + 21
56
+ TVM_ENDEDITLABELNOW = TV_FIRST + 22
57
+ TVM_GETISEARCHSTRING = TV_FIRST + 23
58
+ TVM_SETTOOLTIPS = TV_FIRST + 24
59
+ TVM_GETTOOLTIPS = TV_FIRST + 25
60
+ TVM_SETINSERTMARK = TV_FIRST + 26
61
+ TVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
62
+ TVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
63
+ TVM_SETITEMHEIGHT = TV_FIRST + 27
64
+ TVM_GETITEMHEIGHT = TV_FIRST + 28
65
+ TVM_SETBKCOLOR = TV_FIRST + 29
66
+ TVM_SETTEXTCOLOR = TV_FIRST + 30
67
+ TVM_GETBKCOLOR = TV_FIRST + 31
68
+ TVM_GETTEXTCOLOR = TV_FIRST + 32
69
+ TVM_SETSCROLLTIME = TV_FIRST + 33
70
+ TVM_GETSCROLLTIME = TV_FIRST + 34
71
+ TVM_SETINSERTMARKCOLOR = TV_FIRST + 37
72
+ TVM_GETINSERTMARKCOLOR = TV_FIRST + 38
73
+ TVM_GETITEMSTATE = TV_FIRST + 39
74
+ TVM_SETLINECOLOR = TV_FIRST + 40
75
+ TVM_GETLINECOLOR = TV_FIRST + 41
76
+ TVM_MAPACCIDTOHTREEITEM = TV_FIRST + 42
77
+ TVM_MAPHTREEITEMTOACCID = TV_FIRST + 43
78
+ TVM_SETEXTENDEDSTYLE = TV_FIRST + 44
79
+ TVM_GETEXTENDEDSTYLE = TV_FIRST + 45
80
+ TVM_SETAUTOSCROLLINFO = TV_FIRST + 59
81
+ TVM_GETSELECTEDCOUNT = TV_FIRST + 70
82
+ TVM_SHOWINFOTIP = TV_FIRST + 71
83
+ TVM_GETITEMPARTRECT = TV_FIRST + 72
84
+
85
+ TVN_FIRST = 0x1_0000_0000 - 400
86
+ TVN_LAST = 0x1_0000_0000 - 499
87
+ TVN_SELCHANGING = TVN_FIRST - 1
88
+ TVN_SELCHANGED = TVN_FIRST - 2
89
+ TVN_GETDISPINFO = TVN_FIRST - 3
90
+ TVN_SETDISPINFO = TVN_FIRST - 4
91
+ TVN_ITEMEXPANDING = TVN_FIRST - 5
92
+ TVN_ITEMEXPANDED = TVN_FIRST - 6
93
+ TVN_BEGINDRAG = TVN_FIRST - 7
94
+ TVN_BEGINRDRAG = TVN_FIRST - 8
95
+ TVN_DELETEITEM = TVN_FIRST - 9
96
+ TVN_BEGINLABELEDIT = TVN_FIRST - 10
97
+ TVN_ENDLABELEDIT = TVN_FIRST - 11
98
+ TVN_KEYDOWN = TVN_FIRST - 12
99
+ TVN_GETINFOTIP = TVN_FIRST - 13
100
+ TVN_SINGLEEXPAND = TVN_FIRST - 15
101
+ TVN_ITEMCHANGING = TVN_FIRST - 16
102
+ TVN_ITEMCHANGED = TVN_FIRST - 18
103
+ TVN_ASYNCDRAW = TVN_FIRST - 20
104
+
105
+ TVIF_TEXT = 0x0001
106
+ TVIF_IMAGE = 0x0002
107
+ TVIF_PARAM = 0x0004
108
+ TVIF_STATE = 0x0008
109
+ TVIF_HANDLE = 0x0010
110
+ TVIF_SELECTEDIMAGE = 0x0020
111
+ TVIF_CHILDREN = 0x0040
112
+ TVIF_INTEGRAL = 0x0080
113
+ TVIF_STATEEX = 0x0100
114
+ TVIF_EXPANDEDIMAGE = 0x0200
115
+
116
+ TVIS_SELECTED = 0x0002
117
+ TVIS_CUT = 0x0004
118
+ TVIS_DROPHILITED = 0x0008
119
+ TVIS_BOLD = 0x0010
120
+ TVIS_EXPANDED = 0x0020
121
+ TVIS_EXPANDEDONCE = 0x0040
122
+ TVIS_EXPANDPARTIAL = 0x0080
123
+ TVIS_OVERLAYMASK = 0x0F00
124
+ TVIS_STATEIMAGEMASK = 0xF000
125
+ TVIS_USERMASK = 0xF000
126
+
127
+ TVIS_EX_FLAT = 0x0001
128
+ TVIS_EX_DISABLED = 0x0002
129
+ TVIS_EX_ALL = 0x0002
130
+
131
+ I_CHILDRENCALLBACK = -1
132
+
133
+ class TVITEM < FFI::Struct
134
+ layout \
135
+ :mask, :uint,
136
+ :hItem, :pointer,
137
+ :state, :uint,
138
+ :stateMask, :uint,
139
+ :pszText, :pointer,
140
+ :cchTextMax, :int,
141
+ :iImage, :int,
142
+ :iSelectedImage, :int,
143
+ :cChildren, :int,
144
+ :lParam, :long,
145
+ end
146
+
147
+ class TVITEMEX < FFI::Struct
148
+ layout *[
149
+ :mask, :uint,
150
+ :hItem, :pointer,
151
+ :state, :uint,
152
+ :stateMask, :uint,
153
+ :pszText, :pointer,
154
+ :cchTextMax, :int,
155
+ :iImage, :int,
156
+ :iSelectedImage, :int,
157
+ :cChildren, :int,
158
+ :lParam, :long,
159
+ :iIntegral, :int,
160
+ (WINVER.AtLeastWindowsVista?) ? [
161
+ :uStateEx, :uint,
162
+ :hwnd, :pointer,
163
+ :iExpandedImage, :int
164
+ ] : nil,
165
+ (WINVER.AtLeastWindows7?) ? [
166
+ :iReserved, :int
167
+ ] : nil
168
+ ].flatten.compact
169
+ end
170
+
171
+ TVI_ROOT = FFI::Pointer.new(-0x10000)
172
+ TVI_FIRST = FFI::Pointer.new(-0x0FFFF)
173
+ TVI_LAST = FFI::Pointer.new(-0x0FFFE)
174
+ TVI_SORT = FFI::Pointer.new(-0x0FFFD)
175
+
176
+ class TVINSERTSTRUCT < FFI::Struct
177
+ include AnonymousSupport
178
+
179
+ layout \
180
+ :hParent, :pointer,
181
+ :hInsertAfter, :pointer,
182
+ :_, Class.new(FFI::Union) {
183
+ layout \
184
+ :itemex, TVITEMEX,
185
+ :item, TVITEM
186
+ }
187
+ end
188
+
189
+ class NMTREEVIEW < FFI::Struct
190
+ layout \
191
+ :hdr, NMHDR,
192
+ :action, :uint,
193
+ :itemOld, TVITEM,
194
+ :itemNew, TVITEM,
195
+ :ptDrag, POINT
196
+ end
197
+ end
198
+ end
@@ -0,0 +1,43 @@
1
+ require_relative 'Common'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ UDS_WRAP = 0x0001
6
+ UDS_SETBUDDYINT = 0x0002
7
+ UDS_ALIGNRIGHT = 0x0004
8
+ UDS_ALIGNLEFT = 0x0008
9
+ UDS_AUTOBUDDY = 0x0010
10
+ UDS_ARROWKEYS = 0x0020
11
+ UDS_HORZ = 0x0040
12
+ UDS_NOTHOUSANDS = 0x0080
13
+ UDS_HOTTRACK = 0x0100
14
+
15
+ UDM_SETRANGE = WM_USER + 101
16
+ UDM_GETRANGE = WM_USER + 102
17
+ UDM_SETPOS = WM_USER + 103
18
+ UDM_GETPOS = WM_USER + 104
19
+ UDM_SETBUDDY = WM_USER + 105
20
+ UDM_GETBUDDY = WM_USER + 106
21
+ UDM_SETACCEL = WM_USER + 107
22
+ UDM_GETACCEL = WM_USER + 108
23
+ UDM_SETBASE = WM_USER + 109
24
+ UDM_GETBASE = WM_USER + 110
25
+ UDM_SETRANGE32 = WM_USER + 111
26
+ UDM_GETRANGE32 = WM_USER + 112
27
+ UDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
28
+ UDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
29
+ UDM_SETPOS32 = WM_USER + 113
30
+ UDM_GETPOS32 = WM_USER + 114
31
+
32
+ UDN_FIRST = 0x1_0000_0000 - 721
33
+ UDN_LAST = 0x1_0000_0000 - 729
34
+ UDN_DELTAPOS = UDN_FIRST - 1
35
+
36
+ class NMUPDOWN < FFI::Struct
37
+ layout \
38
+ :hdr, NMHDR,
39
+ :iPos, :int,
40
+ :iDelta, :int
41
+ end
42
+ end
43
+ end
@@ -1 +1,13 @@
1
1
  require_relative 'comctl/Button'
2
+ require_relative 'comctl/SysLink' if Fzeet::Windows::WINVER.AtLeastWindowsXP?
3
+ require_relative 'comctl/Edit'
4
+ require_relative 'comctl/UpDown'
5
+ require_relative 'comctl/MonthCalendar'
6
+ require_relative 'comctl/DateTimePicker'
7
+ require_relative 'comctl/ComboBox'
8
+ require_relative 'comctl/ComboBoxEx'
9
+ require_relative 'comctl/Header'
10
+ require_relative 'comctl/ListView'
11
+ require_relative 'comctl/TreeView'
12
+ require_relative 'comctl/ProgressBar'
13
+ require_relative 'comctl/PropertySheet'
@@ -15,7 +15,6 @@ module Fzeet
15
15
 
16
16
  attach_function :GetLastError, [], :ulong
17
17
  attach_function :SetLastError, [:ulong], :void
18
- attach_function :RestoreLastError, [:ulong], :void
19
18
 
20
19
  def DetonateLastError(on, name, *args)
21
20
  raise "#{name} failed (last error #{GetLastError()})." if (failed = [*on].include?(result = send(name, *args)))
@@ -79,16 +78,63 @@ module Fzeet
79
78
  def LOBYTE(w) w & 0xff end
80
79
  def HIBYTE(w) (w >> 8) & 0xff end
81
80
  def MAKEWORD(low, high) (low & 0xff) | ((high & 0xff) << 8) end
81
+
82
82
  def LOWORD(l) l & 0xffff end
83
83
  def HIWORD(l) (l >> 16) & 0xffff end
84
84
  def MAKELONG(low, high) (low & 0xffff) | ((high & 0xffff) << 16) end
85
+
85
86
  def GET_X_LPARAM(l) ((w = LOWORD(l)) > 0x7fff) ? w - 0x1_0000 : w end
86
87
  def GET_Y_LPARAM(l) ((w = HIWORD(l)) > 0x7fff) ? w - 0x1_0000 : w end
87
88
 
89
+ def LPWSTR(s)
90
+ FFI::MemoryPointer.new(:uchar, (s.length + 2) * 2) { |p|
91
+ "#{s}\0".encode('utf-16le').each_byte.with_index { |b, i|
92
+ p.put_char(i, b)
93
+
94
+ yield p
95
+ }
96
+ }
97
+ end
98
+
99
+ def WCSTOMBS(p)
100
+ result = ''
101
+
102
+ FFI::MemoryPointer.new(:uchar, len = wcslen(p) + 1) { |buf|
103
+ raise 'wcstombs failed.' if wcstombs(buf, p, len) == 0xffffffff
104
+
105
+ result << buf.read_string
106
+ }
107
+
108
+ result
109
+ end
110
+
88
111
  module_function \
89
112
  :LOBYTE, :HIBYTE, :MAKEWORD,
90
113
  :LOWORD, :HIWORD, :MAKELONG,
91
- :GET_X_LPARAM, :GET_Y_LPARAM
114
+ :GET_X_LPARAM, :GET_Y_LPARAM,
115
+ :LPWSTR, :WCSTOMBS
116
+
117
+ module AnonymousSupport
118
+ def [](k)
119
+ if members.include?(k)
120
+ super
121
+ elsif self[:_].members.include?(k)
122
+ self[:_][k]
123
+ else
124
+ self[:_][:_][k]
125
+ end
126
+ end
127
+
128
+ def []=(k, v)
129
+ if members.include?(k)
130
+ super
131
+ elsif self[:_].members.include?(k)
132
+ self[:_][k] = v
133
+ else
134
+ self[:_][:_][k] = v
135
+ end
136
+ end
137
+ end
92
138
 
93
139
  class POINT < FFI::Struct
94
140
  layout \
@@ -127,5 +173,31 @@ module Fzeet
127
173
  :lfPitchAndFamily, :uchar,
128
174
  :lfFaceName, [:char, 32]
129
175
  end
176
+
177
+ class SYSTEMTIME < FFI::Struct
178
+ layout \
179
+ :wYear, :ushort,
180
+ :wMonth, :ushort,
181
+ :wDayOfWeek, :ushort,
182
+ :wDay, :ushort,
183
+ :wHour, :ushort,
184
+ :wMinute, :ushort,
185
+ :wSecond, :ushort,
186
+ :wMilliseconds, :ushort
187
+
188
+ def to_local
189
+ Time.local(
190
+ self[:wYear], self[:wMonth], self[:wDay],
191
+ self[:wHour], self[:wMinute], self[:wSecond], self[:wMilliseconds]
192
+ )
193
+ end
194
+
195
+ def to_utc
196
+ Time.utc(
197
+ self[:wYear], self[:wMonth], self[:wDay],
198
+ self[:wHour], self[:wMinute], self[:wSecond], self[:wMilliseconds]
199
+ )
200
+ end
201
+ end
130
202
  end
131
203
  end
@@ -41,6 +41,8 @@ module Fzeet
41
41
 
42
42
  attach_function :DeleteObject, [:pointer], :int
43
43
 
44
+ attach_function :SelectObject, [:pointer, :pointer], :pointer
45
+
44
46
  attach_function :MoveToEx, [:pointer, :int, :int, :pointer], :int
45
47
  attach_function :LineTo, [:pointer, :int, :int], :int
46
48
  end
@@ -6,5 +6,9 @@ module Fzeet
6
6
  ffi_convention :cdecl
7
7
 
8
8
  attach_function :memcmp, [:pointer, :pointer, :uint], :int
9
+
10
+ attach_function :wcslen, [:buffer_in], :uint
11
+ attach_function :mbstowcs, [:pointer, :string, :uint], :uint
12
+ attach_function :wcstombs, [:pointer, :buffer_in, :uint], :uint
9
13
  end
10
14
  end