wrb 2.0.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 (271) hide show
  1. checksums.yaml +7 -0
  2. data/README +28 -0
  3. data/Rakefile +66 -0
  4. data/bin/wrb +41 -0
  5. data/bin/wrb.bat +6 -0
  6. data/ext/rwin/aatree.c +192 -0
  7. data/ext/rwin/aatree.h +55 -0
  8. data/ext/rwin/extconf.rb +47 -0
  9. data/ext/rwin/rw_api.c +2058 -0
  10. data/ext/rwin/rw_devices.c +215 -0
  11. data/ext/rwin/rw_gdiplus.h +278 -0
  12. data/ext/rwin/rw_graphics.c +1583 -0
  13. data/ext/rwin/rw_resources.c +1988 -0
  14. data/ext/rwin/rw_ubfuncs.c +281 -0
  15. data/ext/rwin/rw_windows.c +1936 -0
  16. data/ext/rwin/rwin.c +451 -0
  17. data/ext/rwin/rwin.h +442 -0
  18. data/lib/rwin.rb +820 -0
  19. data/lib/wrb.rb +20 -0
  20. data/lib/wrb/applications/frmdesigner/angle.cur +0 -0
  21. data/lib/wrb/applications/frmdesigner/angle2.cur +0 -0
  22. data/lib/wrb/applications/frmdesigner/controls/Button.bmp +0 -0
  23. data/lib/wrb/applications/frmdesigner/controls/Button.rb +34 -0
  24. data/lib/wrb/applications/frmdesigner/controls/Checkbox.bmp +0 -0
  25. data/lib/wrb/applications/frmdesigner/controls/Checkbox.rb +10 -0
  26. data/lib/wrb/applications/frmdesigner/controls/Combobox.bmp +0 -0
  27. data/lib/wrb/applications/frmdesigner/controls/Combobox.rb +88 -0
  28. data/lib/wrb/applications/frmdesigner/controls/ComboboxEx.rb +97 -0
  29. data/lib/wrb/applications/frmdesigner/controls/Comboboxex.bmp +0 -0
  30. data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.bmp +0 -0
  31. data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.rb +11 -0
  32. data/lib/wrb/applications/frmdesigner/controls/Edit.bmp +0 -0
  33. data/lib/wrb/applications/frmdesigner/controls/Edit.rb +8 -0
  34. data/lib/wrb/applications/frmdesigner/controls/Groupbox.bmp +0 -0
  35. data/lib/wrb/applications/frmdesigner/controls/Groupbox.rb +9 -0
  36. data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.bmp +0 -0
  37. data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.rb +9 -0
  38. data/lib/wrb/applications/frmdesigner/controls/Imagelist.bmp +0 -0
  39. data/lib/wrb/applications/frmdesigner/controls/Imagelist.rb +115 -0
  40. data/lib/wrb/applications/frmdesigner/controls/Listbox.bmp +0 -0
  41. data/lib/wrb/applications/frmdesigner/controls/Listbox.rb +77 -0
  42. data/lib/wrb/applications/frmdesigner/controls/Listview.bmp +0 -0
  43. data/lib/wrb/applications/frmdesigner/controls/Listview.rb +157 -0
  44. data/lib/wrb/applications/frmdesigner/controls/Menu.bmp +0 -0
  45. data/lib/wrb/applications/frmdesigner/controls/Menu.rb +198 -0
  46. data/lib/wrb/applications/frmdesigner/controls/Menubar.bmp +0 -0
  47. data/lib/wrb/applications/frmdesigner/controls/Menubar.rb +9 -0
  48. data/lib/wrb/applications/frmdesigner/controls/MonthCalender.bmp +0 -0
  49. data/lib/wrb/applications/frmdesigner/controls/Monthcalender.rb +9 -0
  50. data/lib/wrb/applications/frmdesigner/controls/Panel.bmp +0 -0
  51. data/lib/wrb/applications/frmdesigner/controls/Panel.rb +30 -0
  52. data/lib/wrb/applications/frmdesigner/controls/Progressbar.rb +10 -0
  53. data/lib/wrb/applications/frmdesigner/controls/Radiobutton.bmp +0 -0
  54. data/lib/wrb/applications/frmdesigner/controls/Radiobutton.rb +13 -0
  55. data/lib/wrb/applications/frmdesigner/controls/Rebar.bmp +0 -0
  56. data/lib/wrb/applications/frmdesigner/controls/Rebar.rb +162 -0
  57. data/lib/wrb/applications/frmdesigner/controls/Splitter.bmp +0 -0
  58. data/lib/wrb/applications/frmdesigner/controls/Splitter.rb +66 -0
  59. data/lib/wrb/applications/frmdesigner/controls/Static.bmp +0 -0
  60. data/lib/wrb/applications/frmdesigner/controls/Static.rb +9 -0
  61. data/lib/wrb/applications/frmdesigner/controls/Statusbar.bmp +0 -0
  62. data/lib/wrb/applications/frmdesigner/controls/Statusbar.rb +103 -0
  63. data/lib/wrb/applications/frmdesigner/controls/Tabctrl.bmp +0 -0
  64. data/lib/wrb/applications/frmdesigner/controls/Tabctrl.rb +136 -0
  65. data/lib/wrb/applications/frmdesigner/controls/Timer.bmp +0 -0
  66. data/lib/wrb/applications/frmdesigner/controls/Timer.rb +36 -0
  67. data/lib/wrb/applications/frmdesigner/controls/Toolbar.bmp +0 -0
  68. data/lib/wrb/applications/frmdesigner/controls/Toolbar.rb +165 -0
  69. data/lib/wrb/applications/frmdesigner/controls/Trackbar.bmp +0 -0
  70. data/lib/wrb/applications/frmdesigner/controls/Trackbar.rb +34 -0
  71. data/lib/wrb/applications/frmdesigner/controls/Treeview.bmp +0 -0
  72. data/lib/wrb/applications/frmdesigner/controls/Treeview.rb +107 -0
  73. data/lib/wrb/applications/frmdesigner/controls/Updown.bmp +0 -0
  74. data/lib/wrb/applications/frmdesigner/controls/Updown.rb +31 -0
  75. data/lib/wrb/applications/frmdesigner/controls/default.bmp +0 -0
  76. data/lib/wrb/applications/frmdesigner/controls/progressbar.bmp +0 -0
  77. data/lib/wrb/applications/frmdesigner/controls/unselect.bmp +0 -0
  78. data/lib/wrb/applications/frmdesigner/fddialogs.rb +87 -0
  79. data/lib/wrb/applications/frmdesigner/fdesign.rb +1315 -0
  80. data/lib/wrb/applications/frmdesigner/fdmodules.rb +1394 -0
  81. data/lib/wrb/applications/frmdesigner/fdparseform.rb +197 -0
  82. data/lib/wrb/applications/frmdesigner/img13.bmp +0 -0
  83. data/lib/wrb/base.rb +1294 -0
  84. data/lib/wrb/combocommon.rb +77 -0
  85. data/lib/wrb/commctrlconst.rb +139 -0
  86. data/lib/wrb/commdlg.rb +77 -0
  87. data/lib/wrb/components/animate.rb +114 -0
  88. data/lib/wrb/components/bitmap.rb +116 -0
  89. data/lib/wrb/components/button.rb +134 -0
  90. data/lib/wrb/components/canvas.rb +266 -0
  91. data/lib/wrb/components/checkbox.rb +118 -0
  92. data/lib/wrb/components/choosecolordlg.rb +87 -0
  93. data/lib/wrb/components/choosefontdlg.rb +142 -0
  94. data/lib/wrb/components/clipboard.rb +174 -0
  95. data/lib/wrb/components/combobox.rb +282 -0
  96. data/lib/wrb/components/comboboxex.rb +574 -0
  97. data/lib/wrb/components/cursor.rb +91 -0
  98. data/lib/wrb/components/datetimepicker.rb +197 -0
  99. data/lib/wrb/components/ddeclient.rb +180 -0
  100. data/lib/wrb/components/ddeserver.rb +131 -0
  101. data/lib/wrb/components/dialog.rb +228 -0
  102. data/lib/wrb/components/edit.rb +412 -0
  103. data/lib/wrb/components/font.rb +35 -0
  104. data/lib/wrb/components/form.rb +65 -0
  105. data/lib/wrb/components/groupbox.rb +122 -0
  106. data/lib/wrb/components/header.rb +479 -0
  107. data/lib/wrb/components/hotkeyctrl.rb +72 -0
  108. data/lib/wrb/components/icon.rb +109 -0
  109. data/lib/wrb/components/imagelist.rb +396 -0
  110. data/lib/wrb/components/inifile.rb +97 -0
  111. data/lib/wrb/components/listbox.rb +149 -0
  112. data/lib/wrb/components/listview.rb +1467 -0
  113. data/lib/wrb/components/menu.rb +592 -0
  114. data/lib/wrb/components/menubar.rb +84 -0
  115. data/lib/wrb/components/monthcalender.rb +164 -0
  116. data/lib/wrb/components/openfilenamedlg.rb +147 -0
  117. data/lib/wrb/components/pager.rb +199 -0
  118. data/lib/wrb/components/panel.rb +103 -0
  119. data/lib/wrb/components/picture.rb +55 -0
  120. data/lib/wrb/components/printdlg.rb +148 -0
  121. data/lib/wrb/components/printdlgex.rb +117 -0
  122. data/lib/wrb/components/printer.rb +97 -0
  123. data/lib/wrb/components/progressbar.rb +140 -0
  124. data/lib/wrb/components/radiobutton.rb +49 -0
  125. data/lib/wrb/components/rebar.rb +830 -0
  126. data/lib/wrb/components/registry.rb +408 -0
  127. data/lib/wrb/components/richedit.rb +1181 -0
  128. data/lib/wrb/components/savefilenamedlg.rb +27 -0
  129. data/lib/wrb/components/scintilla.rb +1298 -0
  130. data/lib/wrb/components/scrollbar.rb +239 -0
  131. data/lib/wrb/components/splitter.rb +494 -0
  132. data/lib/wrb/components/static.rb +198 -0
  133. data/lib/wrb/components/statusbar.rb +490 -0
  134. data/lib/wrb/components/tabctrl.rb +686 -0
  135. data/lib/wrb/components/timer.rb +117 -0
  136. data/lib/wrb/components/toolbar.rb +1107 -0
  137. data/lib/wrb/components/tooltip.rb +651 -0
  138. data/lib/wrb/components/trackbar.rb +298 -0
  139. data/lib/wrb/components/treeview.rb +845 -0
  140. data/lib/wrb/components/updown.rb +198 -0
  141. data/lib/wrb/ddeml.rb +241 -0
  142. data/lib/wrb/documents/animate.html +46 -0
  143. data/lib/wrb/documents/bitmap.html +69 -0
  144. data/lib/wrb/documents/button.html +78 -0
  145. data/lib/wrb/documents/canvas.html +137 -0
  146. data/lib/wrb/documents/checkbox.html +77 -0
  147. data/lib/wrb/documents/choosecolordlg.html +29 -0
  148. data/lib/wrb/documents/choosefontdlg.html +31 -0
  149. data/lib/wrb/documents/clipboard.html +31 -0
  150. data/lib/wrb/documents/combobox.html +117 -0
  151. data/lib/wrb/documents/comboboxex.html +139 -0
  152. data/lib/wrb/documents/control.html +53 -0
  153. data/lib/wrb/documents/cursor.html +45 -0
  154. data/lib/wrb/documents/datetimepicker.html +70 -0
  155. data/lib/wrb/documents/ddeclient.html +33 -0
  156. data/lib/wrb/documents/ddeserver.html +26 -0
  157. data/lib/wrb/documents/dialog.html +78 -0
  158. data/lib/wrb/documents/edit.html +169 -0
  159. data/lib/wrb/documents/empty.html +11 -0
  160. data/lib/wrb/documents/favicon.png +0 -0
  161. data/lib/wrb/documents/font.html +38 -0
  162. data/lib/wrb/documents/form.html +63 -0
  163. data/lib/wrb/documents/groupbox.html +57 -0
  164. data/lib/wrb/documents/header.html +85 -0
  165. data/lib/wrb/documents/hotkeyctrl.html +42 -0
  166. data/lib/wrb/documents/icon.html +45 -0
  167. data/lib/wrb/documents/imagelist.html +101 -0
  168. data/lib/wrb/documents/images/button.png +0 -0
  169. data/lib/wrb/documents/images/checkbox.png +0 -0
  170. data/lib/wrb/documents/images/combobox.png +0 -0
  171. data/lib/wrb/documents/images/comboboxex.png +0 -0
  172. data/lib/wrb/documents/images/datetimepicker.png +0 -0
  173. data/lib/wrb/documents/images/edit.png +0 -0
  174. data/lib/wrb/documents/images/groupbox.png +0 -0
  175. data/lib/wrb/documents/images/hotkeyctrl.png +0 -0
  176. data/lib/wrb/documents/images/listbox.png +0 -0
  177. data/lib/wrb/documents/images/listview.png +0 -0
  178. data/lib/wrb/documents/images/menu.png +0 -0
  179. data/lib/wrb/documents/images/menubar.png +0 -0
  180. data/lib/wrb/documents/images/monthcalender.png +0 -0
  181. data/lib/wrb/documents/images/progressbar.png +0 -0
  182. data/lib/wrb/documents/images/radiobutton.png +0 -0
  183. data/lib/wrb/documents/images/rebar.png +0 -0
  184. data/lib/wrb/documents/images/richedit.png +0 -0
  185. data/lib/wrb/documents/images/splitter.png +0 -0
  186. data/lib/wrb/documents/images/static.png +0 -0
  187. data/lib/wrb/documents/images/statusbar.png +0 -0
  188. data/lib/wrb/documents/images/tabctrl.png +0 -0
  189. data/lib/wrb/documents/images/toolbar.png +0 -0
  190. data/lib/wrb/documents/images/tooltip.png +0 -0
  191. data/lib/wrb/documents/images/trackbar.png +0 -0
  192. data/lib/wrb/documents/images/treeview.png +0 -0
  193. data/lib/wrb/documents/images/updown.png +0 -0
  194. data/lib/wrb/documents/index.html +155 -0
  195. data/lib/wrb/documents/inifile.html +36 -0
  196. data/lib/wrb/documents/license.txt +22 -0
  197. data/lib/wrb/documents/listbox.html +96 -0
  198. data/lib/wrb/documents/listview.html +277 -0
  199. data/lib/wrb/documents/make_doc.rb +596 -0
  200. data/lib/wrb/documents/menu.html +144 -0
  201. data/lib/wrb/documents/menubar.html +54 -0
  202. data/lib/wrb/documents/monthcalender.html +48 -0
  203. data/lib/wrb/documents/openfilenamedlg.html +36 -0
  204. data/lib/wrb/documents/pager.html +63 -0
  205. data/lib/wrb/documents/panel.html +32 -0
  206. data/lib/wrb/documents/picture.html +48 -0
  207. data/lib/wrb/documents/printdlg.html +35 -0
  208. data/lib/wrb/documents/printdlgex.html +35 -0
  209. data/lib/wrb/documents/printer.html +40 -0
  210. data/lib/wrb/documents/progressbar.html +69 -0
  211. data/lib/wrb/documents/radiobutton.html +51 -0
  212. data/lib/wrb/documents/rebar.html +143 -0
  213. data/lib/wrb/documents/registry.html +36 -0
  214. data/lib/wrb/documents/richedit.html +232 -0
  215. data/lib/wrb/documents/samples/editimg.bmp +0 -0
  216. data/lib/wrb/documents/samples/editimg.iml +0 -0
  217. data/lib/wrb/documents/samples/fileimg.bmp +0 -0
  218. data/lib/wrb/documents/samples/fileimg.iml +0 -0
  219. data/lib/wrb/documents/samples/sample_button.rb +21 -0
  220. data/lib/wrb/documents/samples/sample_checkbox.rb +18 -0
  221. data/lib/wrb/documents/samples/sample_combobox.rb +18 -0
  222. data/lib/wrb/documents/samples/sample_comboboxex.rb +23 -0
  223. data/lib/wrb/documents/samples/sample_datetimepicker.rb +11 -0
  224. data/lib/wrb/documents/samples/sample_edit.rb +25 -0
  225. data/lib/wrb/documents/samples/sample_groupbox.rb +19 -0
  226. data/lib/wrb/documents/samples/sample_hotkeyctrl.rb +12 -0
  227. data/lib/wrb/documents/samples/sample_listbox.rb +12 -0
  228. data/lib/wrb/documents/samples/sample_listview.rb +32 -0
  229. data/lib/wrb/documents/samples/sample_menu.rb +21 -0
  230. data/lib/wrb/documents/samples/sample_menubar.rb +23 -0
  231. data/lib/wrb/documents/samples/sample_monthcalender.rb +11 -0
  232. data/lib/wrb/documents/samples/sample_progressbar.rb +14 -0
  233. data/lib/wrb/documents/samples/sample_radiobutton.rb +14 -0
  234. data/lib/wrb/documents/samples/sample_rebar.rb +25 -0
  235. data/lib/wrb/documents/samples/sample_richedit.rb +60 -0
  236. data/lib/wrb/documents/samples/sample_splitter.rb +33 -0
  237. data/lib/wrb/documents/samples/sample_static.rb +15 -0
  238. data/lib/wrb/documents/samples/sample_statusbar.rb +17 -0
  239. data/lib/wrb/documents/samples/sample_tabctrl.rb +19 -0
  240. data/lib/wrb/documents/samples/sample_toolbar.rb +29 -0
  241. data/lib/wrb/documents/samples/sample_tooltip.rb +50 -0
  242. data/lib/wrb/documents/samples/sample_trackbar.rb +30 -0
  243. data/lib/wrb/documents/samples/sample_treeview.rb +19 -0
  244. data/lib/wrb/documents/samples/sample_updown.rb +18 -0
  245. data/lib/wrb/documents/samples/sampleimg16.iml +0 -0
  246. data/lib/wrb/documents/samples/sampleimg32.iml +0 -0
  247. data/lib/wrb/documents/samples/samplemg16.png +0 -0
  248. data/lib/wrb/documents/samples/samplemg32.png +0 -0
  249. data/lib/wrb/documents/samples/wrb.ico +0 -0
  250. data/lib/wrb/documents/savefilenamedlg.html +19 -0
  251. data/lib/wrb/documents/scrollbar.html +60 -0
  252. data/lib/wrb/documents/splitter.html +96 -0
  253. data/lib/wrb/documents/static.html +84 -0
  254. data/lib/wrb/documents/statusbar.html +110 -0
  255. data/lib/wrb/documents/tabctrl.html +151 -0
  256. data/lib/wrb/documents/timer.html +43 -0
  257. data/lib/wrb/documents/toolbar.html +181 -0
  258. data/lib/wrb/documents/tooltip.html +131 -0
  259. data/lib/wrb/documents/trackbar.html +107 -0
  260. data/lib/wrb/documents/treeview.html +210 -0
  261. data/lib/wrb/documents/updown.html +85 -0
  262. data/lib/wrb/documents/wincontrol.html +258 -0
  263. data/lib/wrb/documents/window.html +499 -0
  264. data/lib/wrb/documents/wrb.css +228 -0
  265. data/lib/wrb/gmem.rb +26 -0
  266. data/lib/wrb/imecommon.rb +59 -0
  267. data/lib/wrb/listcommon.rb +185 -0
  268. data/lib/wrb/lzss.rb +126 -0
  269. data/lib/wrb/scrollinfo.rb +142 -0
  270. data/lib/wrb/toplevelcommon.rb +634 -0
  271. metadata +315 -0
@@ -0,0 +1,87 @@
1
+ require 'wrb/commdlg'
2
+
3
+ module WR
4
+ module RC
5
+ CC_RGBINIT = 0x1
6
+ CC_FULLOPEN = 0x2
7
+ CC_PREVENTFULLOPEN = 0x4
8
+ CC_SHOWHELP = 0x8
9
+ CC_ENABLEHOOK = 0x10
10
+ CC_ENABLETEMPLATE = 0x20
11
+ CC_ENABLETEMPLATEHANDLE = 0x40
12
+ CC_SOLIDCOLOR = 0x80
13
+ CC_ANYCOLOR = 0x100
14
+ end
15
+
16
+ #A dialog box that enables the user to select a color.
17
+ class ChooseColorDlg < CommonDialog
18
+
19
+ API.typealias 'LPCCHOOKPROC', 'Q'
20
+ CHOOSECOLOR = API.defstruct "
21
+ DWORD lStructSize;
22
+ HWND hwndOwner;
23
+ HWND hInstance;
24
+ COLORREF rgbResult;
25
+ COLORREF *lpCustColors;
26
+ DWORD Flags;
27
+ LPARAM lCustData;
28
+ LPCCHOOKPROC lpfnHook;
29
+ LPCTSTR lpTemplateName;"
30
+
31
+ API.defun "ChooseColor(CHOOSECOLOR cc)"
32
+
33
+ def self.show(owner=nil, flags: nil, custcolors: nil)
34
+ cc = self.new
35
+ cc.flags = flags if flags
36
+ cc.custcolors = custcolors if custcolors
37
+ cc.show(owner)
38
+ end
39
+ def self.show2(owner=nil, flags: nil, custcolors: nil)
40
+ cc = self.new
41
+ cc.flags = flags if flags
42
+ cc.custcolors = custcolors if custcolors
43
+ cc.show2(owner)
44
+ end
45
+
46
+ attr_reader :_choosecolor
47
+
48
+ def initialize()
49
+ @_choosecolor = CHOOSECOLOR[CHOOSECOLOR::Size]
50
+ @_custcolors = API::DWORD[16]
51
+ 16.times{|i| @_custcolors[i] = 0xffffff}
52
+ @_choosecolor.lpCustColors = @_custcolors
53
+ end
54
+
55
+ def flags()
56
+ @_choosecolor.Flags
57
+ end
58
+ def flags=(f)
59
+ @_choosecolor.Flags = f
60
+ end
61
+
62
+ def custcolors()
63
+ @_custcolors[0, 16]
64
+ end
65
+ def custcolors=(*clrs)
66
+ clrs = clrs[0] if clrs[0].is_a?(Array)
67
+ raise ArgumentError, "num of arguments must be <= 16" if clrs.size > 16
68
+ clrs.each_with_index{|clr, idx| @_custcolors[idx] = clr}
69
+ end
70
+
71
+ def show(owner=nil)
72
+ @_choosecolor.hwndOwner = owner._hwnd if owner
73
+ r = API.ChooseColor(@_choosecolor)
74
+ r==0 ? nil : @_choosecolor.rgbResult
75
+ end
76
+
77
+ def show2(owner=nil)
78
+ @_choosecolor.hwndOwner = owner._hwnd if owner
79
+ r = API.ChooseColor(@_choosecolor)
80
+ r==0 ? nil : [@_choosecolor.rgbResult, custcolors]
81
+ end
82
+ end
83
+ end
84
+
85
+ module WR
86
+ dpp ChooseColorDlg.show2(custcolors: [0,0xff,0xff00, 0xff0000])
87
+ end if $0==__FILE__
@@ -0,0 +1,142 @@
1
+ # encoding: Windows-31J
2
+ require 'wrb/commdlg'
3
+
4
+ module WR
5
+ module RC
6
+ CF_SCREENFONTS = 0x1
7
+ CF_PRINTERFONTS = 0x2
8
+ CF_BOTH = (CF_SCREENFONTS | CF_PRINTERFONTS)
9
+ CF_SHOWHELP = 0x4
10
+ CF_ENABLEHOOK = 0x8
11
+ CF_ENABLETEMPLATE = 0x10
12
+ CF_ENABLETEMPLATEHANDLE = 0x20
13
+ CF_INITTOLOGFONTSTRUCT = 0x40
14
+ CF_USESTYLE = 0x80
15
+ CF_EFFECTS = 0x100
16
+ CF_APPLY = 0x200
17
+ CF_ANSIONLY = 0x400
18
+ CF_SCRIPTSONLY = CF_ANSIONLY
19
+ CF_NOVECTORFONTS = 0x800
20
+ CF_NOOEMFONTS = CF_NOVECTORFONTS
21
+ CF_NOSIMULATIONS = 0x1000
22
+ CF_LIMITSIZE = 0x2000
23
+ CF_FIXEDPITCHONLY = 0x4000
24
+ CF_WYSIWYG = 0x8000
25
+ CF_FORCEFONTEXIST = 0x10000
26
+ CF_SCALABLEONLY = 0x20000
27
+ CF_TTONLY = 0x40000
28
+ CF_NOFACESEL = 0x80000
29
+ CF_NOSTYLESEL = 0x100000
30
+ CF_NOSIZESEL = 0x200000
31
+ CF_SELECTSCRIPT = 0x400000
32
+ CF_NOSCRIPTSEL = 0x800000
33
+ CF_NOVERTFONTS = 0x1000000
34
+
35
+ SIMULATED_FONTTYPE = 0x8000
36
+ PRINTER_FONTTYPE = 0x4000
37
+ SCREEN_FONTTYPE = 0x2000
38
+ BOLD_FONTTYPE = 0x100
39
+ ITALIC_FONTTYPE = 0x200
40
+ REGULAR_FONTTYPE = 0x400
41
+
42
+ PS_OPENTYPE_FONTTYPE = 0x10000
43
+ TT_OPENTYPE_FONTTYPE = 0x20000
44
+ TYPE1_FONTTYPE = 0x40000
45
+ end
46
+
47
+ # A dialog box that enables the user to choose attributes for a logical font.
48
+ class ChooseFontDlg < CommonDialog
49
+
50
+ API.typealias 'LPCFHOOKPROC', 'Q'
51
+ CHOOSEFONT = API.defstruct "
52
+ DWORD lStructSize;
53
+ HWND hwndOwner;
54
+ HDC hDC;
55
+ LOGFONT *lpLogFont;
56
+ INT iPointSize;
57
+ DWORD Flags;
58
+ COLORREF rgbColors;
59
+ LPARAM lCustData;
60
+ LPCFHOOKPROC lpfnHook;
61
+ LPCTSTR lpTemplateName;
62
+ HINSTANCE hInstance;
63
+ LPWSTR lpszStyle;
64
+ WORD nFontType;
65
+ WORD ___MISSING_ALIGNMENT__;
66
+ INT nSizeMin;
67
+ INT nSizeMax;"
68
+
69
+ API.defun "ChooseFont(CHOOSEFONT cf)"
70
+ LOGFONT = API::LOGFONT
71
+
72
+ attr_reader :_logfont
73
+
74
+ def self.show(owner=nil, name: '', height: -11, flags: nil, color: 0, type: nil)
75
+ cf = self.new
76
+ cf._logfont.lfFaceName = name
77
+ cf._logfont.lfHeight = height
78
+ cf.flags = flags || CF_APPLY | CF_SCREENFONTS | CF_EFFECTS | CF_INITTOLOGFONTSTRUCT
79
+ cf.color = color
80
+ cf.fonttype = type || SCREEN_FONTTYPE
81
+ cf.show(owner)
82
+ end
83
+
84
+ def initialize(lf=nil)
85
+ @_choosefont = CHOOSEFONT[CHOOSEFONT::Size]
86
+ raise ArgumetnError, "Argument must be LOGFONT" if lf && lf.class != LOGFONT
87
+ @_logfont = lf || LOGFONT[LOGFONT::Size]
88
+ @_choosefont.lpLogFont = @_logfont
89
+ @_choosefont.Flags = CF_APPLY | CF_SCREENFONTS | CF_EFFECTS | CF_INITTOLOGFONTSTRUCT
90
+ @_choosefont.nFontType = SCREEN_FONTTYPE
91
+ end
92
+
93
+ def flags()
94
+ @_choosefont.Flags
95
+ end
96
+ def flags=(f)
97
+ @_choosefont.Flags = f
98
+ end
99
+
100
+ def color()
101
+ @_choosefont.rgbColors
102
+ end
103
+ def color=(clr)
104
+ @_choosefont.rgbColors = clr
105
+ end
106
+
107
+ def fonttype()
108
+ end
109
+ def fonttype=(typ)
110
+ @_choosefont.nFontType = typ
111
+ end
112
+
113
+ def pointsize()
114
+ @_choosefont.ipointSize
115
+ end
116
+ def pointsize=(i)
117
+ @_choosefont.iPointSize = i
118
+ end
119
+
120
+ def show(owner=nil)
121
+ @_choosefont.hwndOwner = owner._hwnd if owner
122
+ r = API.ChooseFont(@_choosefont)
123
+ return nil if r == 0
124
+ [@_choosefont.lpLogFont, @_choosefont.rgbColors, @_choosefont.iPointSize]
125
+ end
126
+ end
127
+ end
128
+
129
+ module WR
130
+ # cf = ChooseFontDlg.new
131
+ # cf._logfont.lfFaceName = '@HGP�޼��M'
132
+ # cf._logfont.lfHeight = -18
133
+ # cf.color = 0x00ff00
134
+ ## cf.flags = 0
135
+ #
136
+ # lf, color = cf.show
137
+
138
+ lf, color, pointsize = ChooseFontDlg.show(name:"System", height:-19)
139
+ if lf
140
+ dpp [lf.lfFaceName.to_s, color, lf.lfHeight, pointsize]
141
+ end
142
+ end if $0 == __FILE__
@@ -0,0 +1,174 @@
1
+ require 'wrb'
2
+
3
+ module WR
4
+ module RC
5
+ CF_TEXT = 1
6
+ CF_BITMAP = 2
7
+ CF_METAFILEPICT = 3
8
+ CF_SYLK = 4
9
+ CF_DIF = 5
10
+ CF_TIFF = 6
11
+ CF_OEMTEXT = 7
12
+ CF_DIB = 8
13
+ CF_PALETTE = 9
14
+ CF_PENDATA = 10
15
+ CF_RIFF = 11
16
+ CF_WAVE = 12
17
+ CF_UNICODETEXT = 13
18
+ CF_ENHMETAFILE = 14
19
+ CF_HDROP = 15
20
+ CF_LOCALE = 16
21
+ CF_DIBV5 = 17
22
+ CF_MAX = 18
23
+
24
+ CF_OWNERDISPLAY = 0x0080
25
+ CF_DSPTEXT = 0x0081
26
+ CF_DSPBITMAP = 0x0082
27
+ CF_DSPMETAFILEPICT = 0x0083
28
+ CF_DSPENHMETAFILE = 0x008E
29
+
30
+ CF_PRIVATEFIRST = 0x0200
31
+ CF_PRIVATELAST = 0x02FF
32
+
33
+ CF_GDIOBJFIRST = 0x0300
34
+ CF_GDIOBJLAST = 0x03FF
35
+
36
+ # WM_CUT = 0x0300 # defined at base.rb
37
+ # WM_COPY = 0x0301
38
+ # WM_PASTE = 0x0302
39
+ # WM_CLEAR = 0x0303
40
+ # WM_UNDO = 0x0304
41
+
42
+ WM_RENDERFORMAT = 0x0305
43
+ WM_RENDERALLFORMATS = 0x0306
44
+ WM_DESTROYCLIPBOARD = 0x0307
45
+ WM_DRAWCLIPBOARD = 0x0308
46
+ WM_PAINTCLIPBOARD = 0x0309
47
+ WM_VSCROLLCLIPBOARD = 0x030A
48
+ WM_SIZECLIPBOARD = 0x030B
49
+ WM_ASKCBFORMATNAME = 0x030C
50
+ WM_CHANGECBCHAIN = 0x030D
51
+ WM_HSCROLLCLIPBOARD = 0x030E
52
+ end
53
+
54
+ # Provides an interface that enable applications to transfer data.
55
+ class Clipboard
56
+ include ModAutoloading
57
+ include RC
58
+ API.defun 'OpenClipboard(HWND hWndNewOwner)'
59
+ API.defun 'CloseClipboard()'
60
+ API.defun 'GetClipboardSequenceNumber()'
61
+ API.defun 'GetClipboardOwner()'
62
+ API.defun 'SetClipboardViewer(HWND hWndNewViewer)'
63
+ API.defun 'GetClipboardViewer()'
64
+ API.defun 'ChangeClipboardChain(HWND hWndRemove, HWND hWndNewNext)'
65
+ API.defun 'SetClipboardData(UINT uFormat, HANDLE hMem)'
66
+ API.defun 'GetClipboardData(UINT uFormat)'
67
+ API.defun 'RegisterClipboardFormat(LPCTSTR lpszFormat)'
68
+ API.defun 'CountClipboardFormats()'
69
+ API.defun 'EnumClipboardFormats(UINT format)'
70
+ API.defun 'GetClipboardFormatName(UINT format, LPTSTR lpszFormatName, int cchMaxCount)'
71
+ API.defun 'EmptyClipboard()'
72
+ API.defun 'IsClipboardFormatAvailable(UINT format)'
73
+ API.defun 'GetPriorityClipboardFormat(UINT *paFormatPriorityList, int cFormats)'
74
+ API.defun 'GetOpenClipboardWindow()'
75
+
76
+
77
+ def self.open(win=nil)
78
+ cb = self.new(win)
79
+ if block_given?
80
+ begin
81
+ yield cb
82
+ ensure
83
+ cb.close
84
+ end
85
+ end
86
+ end
87
+
88
+ def initialize(win=nil)
89
+ raise ArgumentError, "Argument must be a Window." if !win.is_a?(RWin::Window) && !win.nil?
90
+ r = API.OpenClipboard(win ? win._hwnd : 0)
91
+ raise "OpenClipboard failed." if r == 0
92
+ end
93
+
94
+ def close()
95
+ API.CloseClipboard()
96
+ end
97
+
98
+ def clear()
99
+ API.EmptyClipboard()
100
+ end
101
+
102
+ def get_string(uformat=CF_TEXT)
103
+ handle = API.GetClipboardData(uformat)
104
+ API.GlobalGetStr(handle)
105
+ end
106
+
107
+ def set_string(str, uformat=CF_TEXT)
108
+ hmem = API.GlobalAllocStr(GHND, str)
109
+ API.SetClipboardData(uformat, hmem) == 0 ? false : true
110
+ end
111
+
112
+ def text=(str)
113
+ set_string(str, CF_TEXT)
114
+ end
115
+ def text()
116
+ get_string(CF_TEXT).unpack('A*')[0]
117
+ end
118
+
119
+ def bitmap=(bmp)
120
+ hbmp = bmp._hbitmap
121
+ API.SetClipboardData(CF_BITMAP, hbmp) == 0 ? false : true
122
+ end
123
+ def bitmap()
124
+ handle = API.GetClipboardData(CF_BITMAP)
125
+ handle == 0 ? nil : Bitmap.fromhandle(handle)
126
+ end
127
+
128
+ def formats()
129
+ r = []
130
+ n = API.CountClipboardFormats()
131
+ ufmt = 0
132
+ n.times{
133
+ ufmt = API.EnumClipboardFormats(ufmt)
134
+ r << ufmt
135
+ }
136
+ r
137
+ end
138
+ end
139
+ end
140
+
141
+ module WR
142
+ class Myform < Form
143
+ def initialize
144
+ controls << Button[:bt1, "Test", 0, 50, 80, 24]
145
+ @bmp1 = Bitmap.loadb64(
146
+ "IRNGwDAAAAAAAAAG0AcBRALAIAAAAAIQEwAIADEBk4ECQJjgWGwGAwGAwGAwGAwGAwGAwGAwGAwGAwICfwJeQCAQCAQCAQCAQCAQCAQCAQCAQEBHYK+QMAf7/f7/f7/f7/f7/f7/f7/gHVBOCBh8DD4ITQMPgwfBvmDB8JD4GHxGphgfBg+Bh8PP4gpw8PiQfDA+Eh8VP4MHx4DjAfGPCOLMbD42HxxTjW/JDCPB8GBpMJgB/v8AP9/ybWkgfJSOBa0pf5VPwLZguzLT+XLMIdoSBg==")
147
+ accept_events(:paint)
148
+ end
149
+
150
+ def created
151
+ Clipboard.open(self){|cb|
152
+ cb.clear
153
+ cb.bitmap = @bmp1
154
+ }
155
+ end
156
+
157
+ def bt1_clicked(*)
158
+ Clipboard.open(self){|cb|
159
+ dpp fm = cb.formats
160
+ $stderr.puts cb.text if fm.index(CF_TEXT)
161
+ $stderr.puts cb.get_string(CF_SYLK) if fm.index(CF_SYLK)
162
+ @bitmap = cb.bitmap if fm.index(CF_BITMAP)
163
+ }
164
+ refresh
165
+ end
166
+
167
+ def self_paint(cv) dpp @bitmap
168
+ return unless @bitmap
169
+ cv.BitBlt(0, 0, @bitmap)
170
+ end
171
+
172
+ self.start
173
+ end
174
+ end if $0 == __FILE__
@@ -0,0 +1,282 @@
1
+ require 'wrb'
2
+ require 'wrb/listcommon'
3
+ require 'wrb/imecommon'
4
+ require 'wrb/combocommon' # Common constats with ComboboxEx.
5
+
6
+ module WR
7
+ module RC
8
+ # CBN_SELCHANGE = 0x01
9
+ # CBN_DBLCLK = 0x02
10
+ # CBN_SETFOCUS = 0x03
11
+ # CBN_KILLFOCUS = 0x04
12
+ # CBN_EDITCHANGE = 0x05
13
+ # CBN_EDITUPDATE = 0x06
14
+ # CBN_DROPDOWN = 0x07
15
+ # CBN_CLOSEUP = 0x08
16
+ # CBN_SELENDOK = 0x09
17
+ # CBN_SELENDCANCEL = 0x0a
18
+
19
+ # CBS_SIMPLE = 0x0001 # defined in combocommon.rb
20
+ # CBS_DROPDOWN = 0x0002
21
+ # CBS_DROPDOWNLIST = 0x0003
22
+ CBS_OWNERDRAWFIXED = 0x0010
23
+ CBS_OWNERDRAWVARIABLE = 0x0020
24
+ CBS_AUTOHSCROLL = 0x0040
25
+ CBS_OEMCONVERT = 0x0080
26
+ CBS_SORT = 0x0100
27
+ CBS_HASSTRINGS = 0x0200
28
+ CBS_NOINTEGRALHEIGHT = 0x0400
29
+ CBS_DISABLENOSCROLL = 0x0800
30
+ CBS_UPPERCASE = 0x2000
31
+ CBS_LOWERCASE = 0x4000
32
+
33
+ # CBS_NOEDIT = (WS_BORDER | CBS_DROPDOWN | CBS_SIMPLE)
34
+ # CBS_EDIT = (WS_BORDER | CBS_DROPDOWN)
35
+
36
+ CB_GETEDITSEL = 0x0140
37
+ # CB_LIMITTEXT = 0x0141
38
+ CB_SETEDITSEL = 0x0142
39
+ CB_ADDSTRING = 0x0143
40
+ # CB_DELETESTRING = 0x0144
41
+ CB_DIR = 0x0145
42
+ # CB_GETCOUNT = 0x0146
43
+ # CB_GETCURSEL = 0x0147
44
+ # CB_GETLBTEXT = 0x0148
45
+ # CB_GETLBTEXTLEN = 0x0149
46
+ CB_INSERTSTRING = 0x014a
47
+ # CB_RESETCONTENT = 0x014b
48
+ CB_FINDSTRING = 0x014c
49
+ CB_SELECTSTRING = 0x014d
50
+ # CB_SETCURSEL = 0x014e
51
+ # CB_SHOWDROPDOWN = 0x014f
52
+ # CB_GETITEMDATA = 0x0150
53
+ # CB_SETITEMDATA = 0x0151
54
+ # CB_GETDROPPEDCONTROLRECT = 0x0152
55
+ # CB_SETITEMHEIGHT = 0x0153
56
+ # CB_GETITEMHEIGHT = 0x0154
57
+ # CB_SETEXTENDEDUI = 0x0155
58
+ # CB_GETEXTENDEDUI = 0x0156
59
+ # CB_GETDROPPEDSTATE = 0x0157
60
+ # CB_FINDSTRINGEXACT = 0x0158
61
+ CB_SETLOCALE = 0x0159
62
+ CB_GETLOCALE = 0x015a
63
+ CB_GETTOPINDEX = 0x015b
64
+ CB_SETTOPINDEX = 0x015c
65
+ CB_GETHORIZONTALEXTENT = 0x015d
66
+ CB_SETHORIZONTALEXTENT = 0x015e
67
+ # CB_GETDROPPEDWIDTH = 0x015f
68
+ # CB_SETDROPPEDWIDTH = 0x0160
69
+ CB_INITSTORAGE = 0x0161
70
+ CB_MULTIPLEADDSTRING = 0x0163
71
+ CB_GETCOMBOBOXINFO = 0x0164
72
+ CB_MSGMAX = 0x0165
73
+ end
74
+
75
+ # This control combines an edit box or static text and a list.
76
+ # <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
77
+ #window-controls"> Windows Control section of Microsoft Docs. </a>
78
+ class Combobox < WinControl #< StandardControl
79
+
80
+ WinStyles = {
81
+ :simple => CBS_SIMPLE,
82
+ :dropdown => CBS_DROPDOWN,
83
+ :dropdownlist => CBS_DROPDOWNLIST,
84
+ :ownerdrawfixed => CBS_OWNERDRAWFIXED,
85
+ :ownerdrawvariable => CBS_OWNERDRAWVARIABLE,
86
+ :autoscroll => CBS_AUTOHSCROLL,
87
+ :oemconvert => CBS_OEMCONVERT,
88
+ :sort => CBS_SORT,
89
+ :hasstrings => CBS_HASSTRINGS,
90
+ :nointegralheight => CBS_NOINTEGRALHEIGHT,
91
+ :disablenoscroll => CBS_DISABLENOSCROLL,
92
+ :uppercase => CBS_UPPERCASE,
93
+ :lowercase => CBS_LOWERCASE,
94
+ }
95
+
96
+ PreDefinedEvents = {
97
+ :selchange => [WM_COMMAND, CBN_SELCHANGE, 'hi'], # ???_selchange(idcmd, code, hwnd)
98
+ :dblclk => [WM_COMMAND, CBN_DBLCLK, 'hi'], # ???_dblclk(idcmd, code, hwnd)
99
+ :setfocus => [WM_COMMAND, CBN_SETFOCUS, 'hi'], # ???_setfocus(idcmd, code, hwnd)
100
+ :killfocus => [WM_COMMAND, CBN_KILLFOCUS, 'hi'], # ???_killfocus(idcmd, code, hwnd)
101
+ :editchange => [WM_COMMAND, CBN_EDITCHANGE, 'hi'], # ???_editchange(idcmd, code, hwnd)
102
+ :editupdate => [WM_COMMAND, CBN_EDITUPDATE, 'hi'], # ???_editupdate(idcmd, code, hwnd)
103
+ :dropdown => [WM_COMMAND, CBN_DROPDOWN, 'hi'], # ???_dropdown(idcmd, code, hwnd)
104
+ :closeup => [WM_COMMAND, CBN_CLOSEUP, 'hi'], # ???_closeup(idcmd, code, hwnd)
105
+ :selendok => [WM_COMMAND, CBN_SELENDOK, 'hi'], # ???_selendok(idcmd, code, hwnd)
106
+ :selendcancel => [WM_COMMAND, CBN_SELENDCANCEL, 'hi'], # ???_selendcancel(idcmd, code, hwnd)
107
+ }
108
+
109
+ DefaultEvents = [
110
+ :selchange # ???_clicked(idcmd, code, hwnd)
111
+ ]
112
+
113
+
114
+ LB_ADDSTRING = CB_ADDSTRING
115
+ LB_INSERTSTRING = CB_INSERTSTRING
116
+ LB_DELETESTRING = CB_DELETESTRING
117
+ LB_SETCURSEL = CB_SETCURSEL
118
+ LB_GETCURSEL = CB_GETCURSEL
119
+ LB_GETTEXT = CB_GETLBTEXT
120
+ LB_GETTEXTLEN = CB_GETLBTEXTLEN
121
+ LB_GETCOUNT = CB_GETCOUNT
122
+ LB_SELECTSTRING = CB_SELECTSTRING
123
+ LB_DIR = CB_DIR
124
+ LB_FINDSTRING = CB_FINDSTRING
125
+ LB_GETITEMDATA = CB_GETITEMDATA
126
+ LB_SETITEMDATA = CB_SETITEMDATA
127
+
128
+ # def self.sym2style(*args) _sym2style(WinStyles, args); end
129
+
130
+ ##################### Main ###################
131
+ include ModStdCtrl
132
+ include ModListItems
133
+ include ModIME
134
+ include ModComboCommon
135
+
136
+ attr_reader :editable
137
+
138
+ def initialize(*args)
139
+ super
140
+ @_classname = "COMBOBOX"
141
+ @_items = []
142
+ @_ar_data = []
143
+ @_acceptable_events = PreDefinedEvents.dup
144
+ self.style |= CBS_DROPDOWNLIST if (st = self.style & 0x00000003) == 0
145
+ @_droppedheight = @_h
146
+ end
147
+
148
+ #
149
+ def idcmd=(id)
150
+ if (self.style & 3) < CBS_DROPDOWNLIST # show editbox
151
+ parent.set_msgtranslator(WM_COMMAND) unless parent.get_msgtranslator(WM_COMMAND)
152
+ parent.register_event(id, WM_COMMAND, CBN_SETFOCUS, "__gotfocus", 'hi', self)
153
+ parent.register_event(id, WM_COMMAND, CBN_KILLFOCUS, "__lostfocus",'hi', self)
154
+ @editable = true
155
+ end
156
+ parent.register_event(CB_DELETESTRING, "__deleteitem__", 'ix', self) # for internal use
157
+ super
158
+ end
159
+
160
+ #
161
+ def create()
162
+ super
163
+ @_items.each_with_index{|val, idx| insert_item(idx, *val)}
164
+ self.droppedwidth = @_droppedwidth if @_droppedwidth
165
+ self.cursel = @_cursel if @_cursel
166
+ end
167
+
168
+ # Retreives a text from combined Edit/Static contlol.<br> Returns a String.
169
+ def text()
170
+ str = self.caption
171
+ class << str
172
+ def selection() # returns [start_pos, end_pos]
173
+ SPLITPARAM(SendMessage(CB_GETEDITSEL, 0, 0))
174
+ end
175
+ def selection=(arg)
176
+ if arg.is_a?(Integer) || arg.is_a?(Array)
177
+ start_pos, end_pos = arg
178
+ end_pos ||= start_pos
179
+ else
180
+ raise ArgumentError, "#{arg.inspect} is not allowed", caller(1)
181
+ end
182
+ SendMessage(CB_SETEDITSEL, start_pos.to_i, end_pos.to_i)
183
+ end
184
+ end if @editable
185
+ str
186
+ end
187
+
188
+ # Sets a text to combined Edit/Static contlol.
189
+ def text=(txt)
190
+ self.caption = txt
191
+ end
192
+
193
+ # Gets the minimum allowable width of this Combobox control.
194
+ def droppedwidth()
195
+ alive? ? SendMessage(CB_GETDROPPEDWIDTH, 0, 0) : @_droppedwidth
196
+ end
197
+
198
+ # Sets the minimum allowable width of this Combobox control.
199
+ def droppedwidth=(w)
200
+ alive? ? SendMessage(CB_SETDROPPEDWIDTH, w.to_i, 0) : @_droppedwidth = w
201
+ end
202
+
203
+ protected
204
+ def _apply_options(arg)
205
+ if st=WinStyles[arg]
206
+ self.style |= st
207
+ return nil
208
+ end
209
+ super
210
+ end
211
+
212
+ ###### common named methods to wrap SendMessage for ModListItems #####
213
+ private
214
+ def _addstring(wp, lp) SendMessage(CB_ADDSTRING, wp, lp); end
215
+ def _insertstring(wp, lp) SendMessage(CB_INSERTSTRING, wp, lp); end
216
+ def _deletestring(wp, lp) SendMessage(CB_DELETESTRING, wp, lp); end
217
+ def _getcount(wp, lp) SendMessage(CB_GETCOUNT, wp, lp); end
218
+ def _gettextlen(wp, lp) SendMessage(CB_GETLBTEXTLEN, wp, lp); end
219
+ def _gettext(wp, lp) SendMessage(CB_GETLBTEXT, wp, lp); end
220
+ def _findstring(wp, lp) SendMessage(CB_FINDSTRING, wp, lp); end
221
+ def _getcursel(wp, lp) SendMessage(CB_GETCURSEL, wp, lp); end
222
+ def _setcursel(wp, lp) SendMessage(CB_SETCURSEL, wp, lp); end
223
+ def _setitemdata(wp, lp) SendMessage(CB_SETITEMDATA, wp, lp); end
224
+ def _getitemdata(wp, lp) SendMessage(CB_GETITEMDATA, wp, lp); end
225
+ end
226
+ end
227
+
228
+ module WR
229
+ class Myform < Form
230
+ def initialize
231
+ @cbox1 = controls << Combobox[:cbox1, "", 4, 4, 100, 100, :simple, :imeon, :disablenoscroll]
232
+ # @cbox2 = controls << Combobox[:cbox2, "", 110, 4, 100, 100, :disablenoscroll, :dropdown, :autoscroll, :droppedwidth=>200]
233
+ # @cbox3 = controls << Combobox[:cbox1, "", 220, 4, 100, 100]
234
+ # (1..8).each{|i| @cbox1 << "item#{i}"}
235
+ # @cbox2[0, 0] = (1..12).to_a.map{|i| ["item#{i}", i]}
236
+ # @cbox2.cursel = -1
237
+ # @cbox2.size = 100, 128
238
+ _<< Button[:button1, "Click me", 10, 200, 80, 24]
239
+ end
240
+
241
+ API.defun "GetWindow(HWND hwnd, UINT uCmd)"
242
+ API.defun "EnumChildWindows(HWND, ENUMPROC, LPARAM)"
243
+ GW_CHILD = 5
244
+
245
+ def button1_clicked(*)
246
+ @cbox1.style |= CBS_DROPDOWNLIST
247
+ end
248
+
249
+ def created()
250
+ dpp @cbox1.h
251
+ @cbox1.style |= CBS_DROPDOWN
252
+ @cbox1.h = 100
253
+ dpp @cbox1.h, @cbox1.droppedheight
254
+ # dpp @cbox3.droppedheight, @cbox3.h, @cbox2.position, @cbox1.droppedsize
255
+ ## dpp @cbox1.selection
256
+ ## @cbox2.inject([]){|a, i| a << [i, i.data]} s
257
+ # # dpp API.GetWindow(@cbox2._hwnd, GW_CHILD)
258
+ # children = []
259
+ # API.EnumChildWindows(@cbox1._hwnd, lambda{|hwnd, lp| children << hwnd ; 1}, 0)
260
+ # children.each{|hwnd|
261
+ # ctrl = WinControl.new_from_handle(hwnd)
262
+ # ctrl.register_event(WM_LBUTTONDOWN, "mousedown", "ih")
263
+ # ctrl.SetWindowSubclass
264
+ # def ctrl.mousedown(*args); dpp args#, self.parent.h
265
+ # CancelDefWindowProc
266
+ # end
267
+ # }
268
+ #dpp @childedit = WinControl.new_from_handle(API.GetWindow(@cbox1._hwnd, GW_CHILD));
269
+ # @childedit.SetWindowSubclass
270
+ # @childedit.register_event(WM_LBUTTONDOWN, "mousedown", "ih")
271
+ # dpp @childedit
272
+ # def @childedit.mousedown(*args); dpp args, self.parent.h
273
+ # CancelDefWindowProc
274
+ # end
275
+ #
276
+ # dpp @cbox2.SendMessage(CB_GETITEMHEIGHT, -1, 0)
277
+ end
278
+
279
+ self.start
280
+ end
281
+
282
+ end if __FILE__==$0