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,651 @@
1
+ require 'wrb'
2
+ require 'wrb/commctrlconst'
3
+
4
+ module WR
5
+ module RC
6
+ TTS_ALWAYSTIP = 0x1
7
+ TTS_NOPREFIX = 0x2
8
+ TTS_NOANIMATE = 0x10
9
+ TTS_NOFADE = 0x20
10
+ TTS_BALLOON = 0x40
11
+ TTS_CLOSE = 0x80
12
+
13
+ TTF_IDISHWND = 0x1
14
+ TTF_CENTERTIP = 0x2
15
+ TTF_RTLREADING = 0x4
16
+ TTF_SUBCLASS = 0x10
17
+ TTF_TRACK = 0x20
18
+ TTF_ABSOLUTE = 0x80
19
+ TTF_TRANSPARENT = 0x100
20
+ TTF_PARSELINKS = 0x1000
21
+ TTF_DI_SETITEM = 0x8000
22
+
23
+ TTDT_AUTOMATIC = 0
24
+ TTDT_RESHOW = 1
25
+ TTDT_AUTOPOP = 2
26
+ TTDT_INITIAL = 3
27
+
28
+ TTI_NONE = 0
29
+ TTI_INFO = 1
30
+ TTI_WARNING = 2
31
+ TTI_ERROR = 3
32
+ TTI_INFO_LARGE = 4
33
+ TTI_WARNING_LARGE = 5
34
+ TTI_ERROR_LARGE = 6
35
+
36
+ TTM_ACTIVATE = WM_USER+1
37
+ TTM_SETDELAYTIME = WM_USER+3
38
+ TTM_ADDTOOLA = WM_USER+4
39
+ TTM_ADDTOOLW = WM_USER+50
40
+ TTM_DELTOOLA = WM_USER+5
41
+ TTM_DELTOOLW = WM_USER+51
42
+ TTM_NEWTOOLRECTA = WM_USER+6
43
+ TTM_NEWTOOLRECTW = WM_USER+52
44
+ TTM_RELAYEVENT = WM_USER+7
45
+ TTM_GETTOOLINFOA = WM_USER+8
46
+ TTM_GETTOOLINFOW = WM_USER+53
47
+ TTM_SETTOOLINFOA = WM_USER+9
48
+ TTM_SETTOOLINFOW = WM_USER+54
49
+ TTM_HITTESTA = WM_USER+10
50
+ TTM_HITTESTW = WM_USER+55
51
+ TTM_GETTEXTA = WM_USER+11
52
+ TTM_GETTEXTW = WM_USER+56
53
+ TTM_UPDATETIPTEXTA = WM_USER+12
54
+ TTM_UPDATETIPTEXTW = WM_USER+57
55
+ TTM_GETTOOLCOUNT = WM_USER+13
56
+ TTM_ENUMTOOLSA = WM_USER+14
57
+ TTM_ENUMTOOLSW = WM_USER+58
58
+ TTM_GETCURRENTTOOLA = WM_USER+15
59
+ TTM_GETCURRENTTOOLW = WM_USER+59
60
+ TTM_WINDOWFROMPOINT = WM_USER+16
61
+ TTM_TRACKACTIVATE = WM_USER+17
62
+ TTM_TRACKPOSITION = WM_USER+18
63
+ TTM_SETTIPBKCOLOR = WM_USER+19
64
+ TTM_SETTIPTEXTCOLOR = WM_USER+20
65
+ TTM_GETDELAYTIME = WM_USER+21
66
+ TTM_GETTIPBKCOLOR = WM_USER+22
67
+ TTM_GETTIPTEXTCOLOR = WM_USER+23
68
+ TTM_SETMAXTIPWIDTH = WM_USER+24
69
+ TTM_GETMAXTIPWIDTH = WM_USER+25
70
+ TTM_SETMARGIN = WM_USER+26
71
+ TTM_GETMARGIN = WM_USER+27
72
+ TTM_POP = WM_USER+28
73
+ TTM_UPDATE = WM_USER+29
74
+ TTM_GETBUBBLESIZE = WM_USER+30
75
+ TTM_ADJUSTRECT = WM_USER+31
76
+ TTM_SETTITLEA = WM_USER+32
77
+ TTM_SETTITLEW = WM_USER+33
78
+ TTM_POPUP = WM_USER+34
79
+ TTM_GETTITLE = WM_USER+35
80
+
81
+ TTM_SETWINDOWTHEME = CCM_SETWINDOWTHEME
82
+
83
+ if RWin::UNICODE
84
+ TTM_ADDTOOL = TTM_ADDTOOLW
85
+ TTM_DELTOOL = TTM_DELTOOLW
86
+ TTM_NEWTOOLRECT = TTM_NEWTOOLRECTW
87
+ TTM_GETTOOLINFO = TTM_GETTOOLINFOW
88
+ TTM_SETTOOLINFO = TTM_SETTOOLINFOW
89
+ TTM_HITTEST = TTM_HITTESTW
90
+ TTM_GETTEXT = TTM_GETTEXTW
91
+ TTM_UPDATETIPTEXT = TTM_UPDATETIPTEXTW
92
+ TTM_ENUMTOOLS = TTM_ENUMTOOLSW
93
+ TTM_GETCURRENTTOOL = TTM_GETCURRENTTOOLW
94
+ TTM_SETTITLE = TTM_SETTITLEW
95
+ else
96
+ TTM_ADDTOOL = TTM_ADDTOOLA
97
+ TTM_DELTOOL = TTM_DELTOOLA
98
+ TTM_NEWTOOLRECT = TTM_NEWTOOLRECTA
99
+ TTM_GETTOOLINFO = TTM_GETTOOLINFOA
100
+ TTM_SETTOOLINFO = TTM_SETTOOLINFOA
101
+ TTM_HITTEST = TTM_HITTESTA
102
+ TTM_GETTEXT = TTM_GETTEXTA
103
+ TTM_UPDATETIPTEXT = TTM_UPDATETIPTEXTA
104
+ TTM_ENUMTOOLS = TTM_ENUMTOOLSA
105
+ TTM_GETCURRENTTOOL = TTM_GETCURRENTTOOLA
106
+ TTM_SETTITLE = TTM_SETTITLEA
107
+ end
108
+
109
+ TTN_FIRST = -520
110
+ TTN_GETDISPINFOA = TTN_FIRST-0
111
+ TTN_GETDISPINFOW = TTN_FIRST-10
112
+ TTN_SHOW = TTN_FIRST-1
113
+ TTN_POP = TTN_FIRST-2
114
+ TTN_LINKCLICK = TTN_FIRST-3
115
+
116
+ if RWin::UNICODE
117
+ TTN_GETDISPINFO = TTN_GETDISPINFOW
118
+ else
119
+ TTN_GETDISPINFO = TTN_GETDISPINFOA
120
+ end
121
+ TTN_NEEDTEXT = TTN_GETDISPINFO
122
+
123
+ LPSTR_TEXTCALLBACK = -1
124
+ end
125
+
126
+ # A small window that appears automatically, or pops up, when the user pauses the mouse pointer over a tool or some other UI element.
127
+ # <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
128
+ # window-controls"> Windows Control section of Microsoft Docs.</a>
129
+ class Tooltip < WinControl
130
+
131
+ if APP::COMCTL_MAJOR_VERSION < 6
132
+ TOOLINFO = API.defstruct "
133
+ UINT cbSize;
134
+ UINT uFlags;
135
+ HWND hwnd;
136
+ UINT_PTR uId;
137
+ RECT rect;
138
+ HINSTANCE hinst;
139
+ LPTSTR lpszText;
140
+ LPARAM lParam;"
141
+ else
142
+ TOOLINFO = API.defstruct "
143
+ UINT cbSize;
144
+ UINT uFlags;
145
+ HWND hwnd;
146
+ UINT_PTR uId;
147
+ RECT rect;
148
+ HINSTANCE hinst;
149
+ LPTSTR lpszText;
150
+ LPARAM lParam;
151
+ void *lpReserved;"
152
+ end
153
+
154
+ TTGETTITLE = API.defstruct "
155
+ DWORD dwSize;
156
+ UINT uTitleBitmap;
157
+ UINT cch;
158
+ TCHAR *pszTitle;"
159
+
160
+ TTHITTESTINFO = API.defstruct "
161
+ HWND hwnd;
162
+ POINT pt;
163
+ TOOLINFO ti;"
164
+
165
+ NMTTDISPINFO = API.defstruct "
166
+ NMHDR hdr;
167
+ LPTSTR lpszText;
168
+ TCHAR szText;
169
+ HINSTANCE hinst;
170
+ UINT uFlags;
171
+ LPARAM lParam;"
172
+
173
+ # The wrapper of the TOOLINFO and a holder of control ID
174
+ class Tip
175
+ include RC
176
+ TtfStyles = {
177
+ :idishwnd => TTF_IDISHWND,
178
+ :centertip => TTF_CENTERTIP,
179
+ :rtlreading => TTF_RTLREADING,
180
+ :suclass => TTF_SUBCLASS,
181
+ :track => TTF_TRACK,
182
+ :absolute => TTF_ABSOLUTE,
183
+ :transparent => TTF_TRANSPARENT,
184
+ :parselinks => TTF_PARSELINKS,
185
+ :di_setitem => TTF_DI_SETITEM
186
+ }
187
+
188
+ attr_reader :_itemwnd
189
+
190
+ def initialize(*args)
191
+ @_owner = args.shift if args[0].is_a?(Tooltip)
192
+ if args.size == 1
193
+ if args[0].is_a?(Integer) || args[0].is_a?(RWin::Window)
194
+ id = args[0]
195
+ @toolinfo = TOOLINFO[TOOLINFO::Size, 0, @_owner.parent._hwnd]
196
+ if id.is_a?(Integer)
197
+ @toolinfo.uId = id
198
+ else
199
+ @toolinfo.uFlags = TTF_IDISHWND
200
+ @toolinfo.uId = id._hwnd
201
+ end
202
+ return
203
+ end
204
+ end
205
+ f = 0
206
+ while args.last.is_a?(Symbol)
207
+ f |= TtfStyles[args.pop].to_i
208
+ end
209
+ f = TTF_SUBCLASS if f == 0
210
+ @_itemwnd, @_text, @_flags, @_data = args
211
+ if @_itemwnd.is_a?(Array)
212
+ @_rect = RECT[@_itemwnd]
213
+ @_itemwnd = @_owner._get_newest_tip_id if @_owner
214
+ elsif @_itemwnd.is_a?(RECT)
215
+ @_rect = @_itemwnd
216
+ @_itemwnd = @_owner._get_newest_tip_id if @_owner
217
+ # @_itemwnd = 0
218
+ end
219
+ @_flags = @_falgs || 0
220
+ raise ArgumentError, "Num of arguments must be 2 or more" if @_text.nil?
221
+ @_flags |= f
222
+ end
223
+ #
224
+ def owner=(onr)
225
+ @_owner = onr
226
+ @_itemwnd = @_owner._get_newest_tip_id if @_rect
227
+ end
228
+
229
+ def delete() #; dp "@%p", [@toolinfo.hwnd, @toolinfo.uId]
230
+ if @_owner.alive?
231
+ @_owner.SendMessage(TTM_DELTOOL, 0, @toolinfo)
232
+ else
233
+ @_owner.delete(@_itemwnd)
234
+ end
235
+ end
236
+
237
+ def text()
238
+ if @_owner.alive?
239
+ buff = TCHAR[256] # No way to get size of buffer.
240
+ @toolinfo.lpszText = buff
241
+ @_owner.SendMessage(TTM_GETTEXT, buff.size, @toolinfo)
242
+ buff.to_s
243
+ else
244
+ @_text
245
+ end
246
+ end
247
+ def text=(txt)
248
+ if @_owner.alive?
249
+ @toolinfo.lpszText = txt
250
+ @_owner.SendMessage(TTM_UPDATETIPTEXT, 0, @toolinfo)
251
+ else
252
+ @_text = txt
253
+ end
254
+ end
255
+
256
+ def rect=(*args)
257
+ args = args[0] if args[0].is_a?(Array)
258
+ @toolinfo.rect = args[0].is_a?(RECT) ? args[0] : RECT[*args]
259
+ if @_owner.alive?
260
+ @_owner.SendMessage(TTM_NEWTOOLRECT, 0, @toolinfo)
261
+ else
262
+ @_rect = args
263
+ end
264
+ end
265
+ def rect()
266
+ if @_owner.alive?
267
+ @_owner.SendMessage(TTM_GETTOOLINFO, 0, @toolinfo)
268
+ @toolinfo.rect
269
+ else
270
+ @_rect
271
+ end
272
+ end
273
+
274
+ #
275
+ def _tooltipinfo #; dp "@%p, %#x", @_owner.owner, @_owner.owner._hwnd
276
+ ti = TOOLINFO[TOOLINFO::Size, @_flags]
277
+ ti.uFlags = TTF_SUBCLASS
278
+ ti.hwnd = @_owner.owner._hwnd
279
+ if @_itemwnd.is_a?(Integer)
280
+ ti.uId = @_itemwnd
281
+ else
282
+ ti.uFlags |= TTF_IDISHWND
283
+ ti.uId = @_itemwnd._hwnd
284
+ end
285
+ ti.rect = @_rect if @_rect
286
+ ti.hinst = APP.hInstance
287
+ ti.lpszText = @_text
288
+ lparam = @_data.__id__
289
+ @_owner._ar_data << @_data if (lparam&1)==0 && lparam>NilID
290
+ ti.lParam = lparam
291
+ ti
292
+ end
293
+ end #class Tip
294
+
295
+ ######################### Main ######################
296
+
297
+ PreDefinedEvents = {
298
+ :getdispinfo => [WM_NOTIFY, TTN_GETDISPINFO, 'xs', NMTTDISPINFO],
299
+ :show => [WM_NOTIFY, TTN_SHOW, 'xs', NMHDR],
300
+ :pop => [WM_NOTIFY, TTN_POP, 'xs', NMHDR],
301
+ :linkclick => [WM_NOTIFY, TTN_LINKCLICK],
302
+ :needtext => [WM_NOTIFY, TTN_NEEDTEXT, 'xs', NMTTDISPINFO]
303
+ }
304
+
305
+ attr_reader :indexes, :_ar_data
306
+
307
+ def initialize(*args)
308
+ super(*args)
309
+ @_style = (self.style & 0xffff) | WS_POPUP | TTS_ALWAYSTIP
310
+ @_classname = "tooltips_class32"
311
+ @_exstyle = WS_EX_TOPMOST | WS_EX_TOOLWINDOW
312
+ @_owner = @__remain_arg__ if @__remain_arg__
313
+ @_tips = []
314
+ @_acceptable_events = PreDefinedEvents.dup
315
+ @_ar_data = []
316
+ end
317
+ #
318
+ def owner()
319
+ @_owner
320
+ end
321
+ #
322
+ def owner=(win)
323
+ @_owner = win
324
+ end
325
+ #
326
+ def create(*args)
327
+ etc = self.idcmd # fails to create if idcmd != 0
328
+ self.idcmd = 0
329
+ if @_parent.event_registered?(idcmd, WM_NOTIFY, TTM_DELTOOL, "__deletool__", self)
330
+ @_parent.register_event(self.idcmd, WM_NOTIFY, TTM_DELTOOL, "__deletool__", 'xs',
331
+ TOOLINFO, self) # for internal use
332
+ end
333
+ super
334
+ self.idcmd = etc
335
+ @_owner ||= self.parent
336
+ @_tips.each{|tip|
337
+ SendMessage(TTM_ADDTOOL, 0, tip._tooltipinfo)
338
+ }
339
+ @_owner.tooltips = self if @_owner && @_owner.respond_to?(:tooltips=)
340
+ title = @_title if @_title
341
+ delaytimes = @_delaytimes if @_delaytimes
342
+ colors = @_colors if @_colors
343
+ maxtipwidth = @_maxtipwidth if @_maxtipwidth
344
+ windowtheme = @_windowtheme if @_windowtheme # Not work?
345
+ end
346
+
347
+ # Registers a tip with a tooltip control.<br>
348
+ # Arguments can be an array of [ID_or_Control_or_RECT, tip_text]
349
+ def add(*args)
350
+ args = args[0] if args[0].is_a?(Array)
351
+ tip = Tip.new(*args)
352
+ tip.owner = self
353
+ alive? ? SendMessage(TTM_ADDTOOL, 0, tip._tooltipinfo) : @_tips << tip
354
+ end
355
+ alias << add
356
+
357
+ # Deletes a tip specifiled <i>arg</i> in this tooltip control.<br>
358
+ # Give a RWin::Window or a integer for ID as <i>arg</i>.
359
+ # If no argument given, deletes self.
360
+ def delete(arg=nil)
361
+ return super() if arg.nil?
362
+ if alive?
363
+ tti = TOOLINFO[TOOLINFO::Size, 0, @_owner._hwnd,
364
+ arg.is_a?(RWin::Window) ? arg._hwnd : arg]
365
+ SendMessage(TTM_DELTOOL, 0, tti)
366
+ else
367
+ idx = @_tips.index{|tip| tip._itemwnd == arg}
368
+ @_tips.delete_at(idx) #; dp "@%p, %p", idx, @_tips
369
+ end
370
+ end
371
+
372
+ # Retreives a Tip specified <i>id</i> in this tooltip control.
373
+ # The id can be an Integer as index or hwnd, or a RW::Window.
374
+ def fetch(id)
375
+ if id.is_a?(Integer) && id<ModParent::ItemBaseID
376
+ if alive?
377
+ SendMessage(TTM_ENUMTOOLS, id, tti=TOOLINFO[TOOLINFO::Size])
378
+ Tip.new(self, tti.uId)
379
+ else
380
+ @_tips[id]
381
+ end
382
+ else
383
+ alive? ? Tip.new(self, id) : @_tips.find{|tip| tip._itemwnd == id}
384
+ end
385
+ end
386
+ alias [] fetch
387
+
388
+ # Retreives a number of tips of this tooltip control.
389
+ def count()
390
+ alive? ? SendMessage(TTM_GETTOOLCOUNT, 0, 0) : @_tips.size
391
+ end
392
+
393
+ # each(){|tip| ... }
394
+ # Performs the block for each <i>tip</i> in this tooltips as a block parameter.
395
+ def each()
396
+ if alive?
397
+ count.times{|i|
398
+ SendMessage(TTM_ENUMTOOLS, i, tti=TOOLINFO[TOOLINFO::Size])
399
+ yield Tip.new(self, tti.uId)
400
+ }
401
+ else
402
+ @_tips.each{|i| yield i}
403
+ end
404
+ end
405
+
406
+ # Retrieve information concerning the title of a tooltip control.
407
+ # Returns an array of [String, Icon]
408
+ def title()
409
+ if alive?
410
+ buff = TCHAR[256] # No way to get size of buffer.
411
+ ttg = TTGETTITLE[TTGETTITLE::Size, 0, buff.size, buff]
412
+ SendMessage(TTM_GETTITLE, 0, ttg)
413
+ [buff.to_s, APP.hrsc2ref(ttg.uTitleBitmap) || ttg.uTitleBitmap]
414
+ else
415
+ @_title
416
+ end
417
+ end
418
+
419
+ # title=(text, icon=nil)
420
+ # Adds a title string and standard icon to this tooltip.
421
+ def title=(*args)
422
+ txt, icon = args[0]
423
+ if alive?
424
+ hicon = (icon.is_a?(Integer) || icon.nil?) ? icon : icon.hicon
425
+ SendMessage(TTM_SETTITLE, hicon.to_i, txt.to_s)
426
+ else
427
+ @_title = [icon, txt]
428
+ end
429
+ end
430
+
431
+ # delaytimes=(initial, reshow, autopop)
432
+ # Sets the initial, pop-up, and reshow durations for this tooltip control.
433
+ def delaytimes=(*args)
434
+ args = args[0] if args[0].is_a?(Array)
435
+ initial, reshow, autopop = args # Unit is millisec.
436
+ if alive?
437
+ if initial == :automatic
438
+ SendMessage(TTM_SETDELAYTIME, TTDT_AUTOMATIC, 0)
439
+ else
440
+ SendMessage(TTM_SETDELAYTIME, TTDT_INITIAL, initial ? initial.to_i : -1)
441
+ SendMessage(TTM_SETDELAYTIME, TTDT_RESHOW, reshow ? reshow.to_i : -1)
442
+ SendMessage(TTM_SETDELAYTIME, TTDT_AUTOPOP, autopop ? autopop.to_i : -1)
443
+ end
444
+ else
445
+ @_delaytimes = [initial, reshow, autopop]
446
+ end
447
+ end
448
+ # Retrieves the initial, pop-up, and reshow durations currently set for this tooltip control.
449
+ # Retruns array of [initial, reshow, autopop].
450
+ def delaytimes()
451
+ if alive?
452
+ initial = SendMessage(TTM_SETDELAYTIME, TTDT_INITIAL, 0)
453
+ reshow = SendMessage(TTM_SETDELAYTIME, TTDT_RESHOW, 0)
454
+ autopop = SendMessage(TTM_SETDELAYTIME, TTDT_AUTOPOP, 0)
455
+ [initial, reshow, autopop]
456
+ else
457
+ @_delaytimes
458
+ end
459
+ end
460
+
461
+ # Sets the maximum width for this tooltip window.
462
+ def maxtipwidth=(width)
463
+ alive? ? SendMessage(TTM_SETMAXTIPWIDTH, 0, width) : @_maxtipwidth = width
464
+ end
465
+
466
+ # Retrieves the maximum width for this tooltip window.
467
+ def maxtipwidth
468
+ alive? ? SendMessage(TTM_GETMAXTIPWIDTH, 0, 0) : @_maxtipwidth
469
+ end
470
+
471
+ # Tests a point to determine whether it is within the bounding rectangle of the specified tip and, if it is, retrieves information about the tip.
472
+ def hittest(x, y)
473
+ hi = TTHITTESTINFO[@_owner._hwnd, POINT[x, y], TOOLINFO[TOOLINFO::Size]]
474
+ r = SendMessage(TTM_HITTEST, 0, hi)
475
+ r==0 ? nil : Tip.new(self, hi.ti.uId)
476
+ end
477
+
478
+ # Following methods has no effect when the application runs on Windows Vista
479
+ # or later and visual styles are enabled for the tooltip.
480
+
481
+
482
+ def margin()
483
+ if alive?
484
+ rect = RECT[args]
485
+ SendMessage(TTM_SETMARGIN, 0, rect)
486
+ rect.to_a
487
+ else
488
+ @_margin
489
+ end
490
+ end
491
+ # These have no effects when the applidation runs on the visual styles.
492
+ def margin=(*args)
493
+ args = args[0] if args[0].is_a?(Array)
494
+ if alive?
495
+ rect = RECT[args]
496
+ SendMessage(TTM_SETMARGIN, 0, rect)
497
+ else
498
+ @_margin = args
499
+ end
500
+ end
501
+
502
+ def colors()
503
+ if alive?
504
+ fore = SendMessage(TTM_GETTIPTEXTCOLOR, 0, 0)
505
+ back = SendMessage(TTM_SETTIPBKCOLOR, 0, 0)
506
+ [fore, back]
507
+ else
508
+ @_colors
509
+ end
510
+ end
511
+ # These have no effects when the applidation runs on the visual styles.
512
+ def colors=(*args)
513
+ fore, back = args[0]
514
+ if alive?
515
+ SendMessage(TTM_SETTIPTEXTCOLOR, fore, 0) if fore
516
+ SendMessage(TTM_SETTIPBKCOLOR, back, 0) if back
517
+ else
518
+ @_colors = [fore, back]
519
+ end
520
+ end
521
+
522
+ #
523
+ def windowtheme=(theme) # Not work...
524
+ if alive?
525
+ SendMessage(TTM_SETWINDOWTHEME, 0, theme)
526
+ else
527
+ @_windowtheme = theme
528
+ end
529
+ end
530
+ #
531
+ def _get_newest_tip_id()
532
+ r = 0
533
+ if alive?
534
+ count.times{|i|
535
+ SendMessage(TTM_ENUMTOOLS, i, tti=TOOLINFO[TOOLINFO::Size])
536
+ uid = tti.uId
537
+ r = uid if tti.uFlags&TTF_IDISHWND==0 && uid<ModParent::ItemBaseID && r<uid
538
+ }
539
+ r + 1
540
+ else
541
+ each{|i| r += 1 if !i.is_a?(Window) && !i.is_a?(Integer)}
542
+ r
543
+ end
544
+ end
545
+
546
+
547
+ WinStyles = {
548
+ :alwaystip => TTS_ALWAYSTIP,
549
+ :noprefix => TTS_NOPREFIX,
550
+ :noamimate => TTS_NOANIMATE,
551
+ :nofade => TTS_NOFADE,
552
+ :balloon => TTS_BALLOON,
553
+ :close => TTS_CLOSE
554
+ }
555
+
556
+ protected
557
+ def _apply_options(arg)
558
+ if st = WinStyles[arg]
559
+ self.style |= st
560
+ end
561
+ # super
562
+ end
563
+
564
+ private
565
+ def __deltool__(ti)
566
+ return unless @_ar_data # recycled?
567
+ data = ObjectSpace._id2ref(ti.lParam) rescue nil
568
+ if data && n = @_ar_data.index(data) #; dp "@%p, %p, %p", data, n, @_ar_data
569
+ @_ar_data.delete_at(n)
570
+ end
571
+ end
572
+ end
573
+ end
574
+
575
+ module WR
576
+ class Form1 < Form
577
+ def initialize
578
+ resize 640, 480
579
+ self.font = Font["Meiryo", 18]
580
+ self.events = :paint
581
+
582
+ _<< Toolbar[:toolbar1, '',0,0,100,30, :tooltips]
583
+ _toolbar1.imagelist = :systemlarge
584
+ _toolbar1 << [:btnew, :filenew]
585
+ _toolbar1 << [:btopen, :fileopen]
586
+ _toolbar1 << [:btsave, :filesave]
587
+
588
+ _<< Button[:button1, "Delet tip", 100, 100, 100, 30]
589
+ _<< Button[:button2, "Hittest", 100, 150, 100, 30]
590
+
591
+ _<< Statusbar[:stb1, 'Part1', 0, 0, 100, 24]
592
+ _stb1 << [[100, 'part2'], [100, 'part3']]
593
+ _<< Tooltip[:tooltip0, '', 0, 0, 0, 0, :noprefix]
594
+ _tooltip0 << [_stb1, "Statusbar!"]
595
+ _tooltip0.events = :getdispinfo, :show
596
+
597
+ _<< Tooltip[:tooltip1, '', 0,0,0,0,:balloon]
598
+ _tooltip1 << [_button1, "shown tip by control!"]
599
+ _tooltip1 << [_button2, "shown tip by control!"]
600
+ _tooltip1 << [RECT[0,100,100,200], "shown tip by area1!"]
601
+ _tooltip1 << [RECT[0,200,100,300], "shown tip by area2!"]
602
+
603
+ _<< Tooltip[:tooltip2, '',0,0,0,0, _toolbar1]
604
+ _tooltip2 << [_toolbar1.btnew.idcmd, "New!"]
605
+ _tooltip2 << [_toolbar1.btopen.idcmd, "Open!"]
606
+ _tooltip2 << [_toolbar1.btsave.idcmd, "Save!"]
607
+ _tooltip1[0].text += ' (added)'
608
+ end
609
+
610
+ def created()
611
+ # dpp APP::COMCTL_MAJOR_VERSION, APP::COMCTL_MINOR_VERSION
612
+ # _toolbar1.tooltips = _tooltip2
613
+ end
614
+
615
+ def tooltip0_getdispinfo(nm)
616
+ dpp nm.to_hsh
617
+ end
618
+
619
+ def tooltip0_show(nm)
620
+ dpp nm.to_hsh
621
+ end
622
+
623
+ def self_paint(cv)
624
+ cv.SetFont(self.font)
625
+ cv.FillRect(0, 100, 100, 200, 0xffffff)
626
+ cv.FillRect(0, 100, 50, 150, 0xffffff)
627
+ cv.DrawText("tooltip area1", 10, 160, 90, 180)
628
+ cv.SetBrush(0xffffd0)
629
+ cv.FillRect(0, 200, 100, 300, 0xffffd0)
630
+ cv.DrawText("tooltip area2", 10, 240, 90, 260)
631
+ end
632
+
633
+ def button1_clicked(*)
634
+ return _tooltip1.delete
635
+ dp "@%p", _tooltip1[_button1]
636
+ _tooltip1[_button1].delete
637
+ _tooltip1[1].delete
638
+ end
639
+
640
+ def button2_clicked(*)
641
+ _tooltip1.colors = 0x0000ff, 0xffffff
642
+ _tooltip1.windowtheme = 'Windows Calssic'
643
+ _tooltip1.each{|i| p i.text}
644
+ dp "@%p", _tooltip1.hittest(30, 120)
645
+ dp "@%p", _tooltip1.hittest(50, 250)
646
+ _tooltip1.delaytimes = 100, 500, 1000
647
+ _tooltip1[0].rect = 0, 100, 50, 150
648
+ end
649
+ self.start
650
+ end
651
+ end if $0 == __FILE__