fzeet 0.5.3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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