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,126 @@
1
+ # Imprementation of LZSS compression by Ruby
2
+
3
+ require 'wrb'
4
+
5
+ module WR
6
+ class LZSS
7
+ PatMin = 3
8
+ PatMax = 18 # 16 pattern (3 to 18)
9
+
10
+ def self.compress(str) self.new(str).compress; end
11
+ def self.expand(str) self.new(str).expand; end
12
+
13
+ def initialize(str)
14
+ @src = str.b
15
+ end
16
+
17
+ def compress()
18
+ rp = 0
19
+ ht = {}
20
+ dst = "".b
21
+ def dst.concat_bits(bint, blen)
22
+ raise ArgumentError, "Argument is too big." if bint > 0xffff || blen > 16
23
+ @bit_offset ||= 0
24
+ len = @bit_offset + blen
25
+ ival = bint << (32 - len)
26
+ n, new_offset = len.divmod(8)
27
+ if @bit_offset==0
28
+ self.concat([ival].pack('N')[0, new_offset==0 ? n : n + 1])
29
+ else
30
+ s = [self[-1].ord << 24 | ival].pack('N')
31
+ self[-1] = s[0]
32
+ self.concat(s[1, new_offset==0 ? n - 1 : n]) if len > 8
33
+ end
34
+ @bit_offset = new_offset
35
+ self
36
+ end
37
+
38
+ while rp < @src.bytesize
39
+ found = len = nil
40
+ max = @src.size - rp > PatMax ? PatMax : @src.size - rp
41
+ max.downto(PatMin) {|i| # search pattern.
42
+ s = @src[rp, i]
43
+ if (found = ht[s])
44
+ if rp - found > 4095 # length of offset is 12 bits.
45
+ found = nil # only replace address of pattern.
46
+ elsif found + i < rp
47
+ len = i
48
+ break
49
+ else
50
+ found = nil
51
+ break
52
+ end
53
+ end
54
+ ht[s] = rp
55
+ }
56
+ if found
57
+ offset = rp - found
58
+ dst.concat_bits(1, 1)
59
+ dst.concat_bits((offset << 4) + len - 3, 16) # length of pattern is 4bits(3 to 18).
60
+ rp += len
61
+ else
62
+ dst.concat_bits(0, 1)
63
+ dst.concat_bits(@src[rp, 1].ord, 8)
64
+ rp += 1
65
+ end
66
+ end
67
+ dst
68
+ end
69
+
70
+ def expand()
71
+ dst = "".b
72
+ bp = 0
73
+ while true
74
+ q, r = bp.divmod(8)
75
+ s = @src[q] # get 1 byte
76
+ break unless s
77
+ data = s.ord # convert to 8 bits integer value
78
+ break unless @src[q+1]
79
+ data = (data << 8) + @src[q + 1].ord # join more 1 byte
80
+ if data[15-r] == 0 # read flag bit
81
+ bp += 9
82
+ dst.concat ((data >> 8 - r - 1) & 0xff).chr # return 1 byte to char
83
+ else
84
+ data = (data << 8) + @src[q + 2].ord # join more 1 byte
85
+ x = (data >> (8 - r - 1)) & 0xffff # get 16 bits which containes length and offset.
86
+ dic_len = (x & 0xf) + PatMin
87
+ dic_off = x >> 4 # length of pattern is 4bits(3 to 18).
88
+ bp += 17
89
+ dst.concat dst[dst.size - dic_off, dic_len] # get from dictionary
90
+ end
91
+ end
92
+ dst
93
+ end
94
+ end
95
+ end
96
+
97
+ module WR
98
+ Dir.foreach('./'){|i|
99
+ if File.directory?(i)
100
+ next if i =~ /\.+/
101
+ Dir.foreach(i){|j|
102
+ unless File.directory?(i + '/' +j)
103
+ s = open(i + '/' +j, 'rb'){|f| f.read}
104
+ r = LZSS.compress(s)
105
+ d = LZSS.expand(r)
106
+ dp "%20s: %p, size=%6d, late=%f", j, s==d, r.bytesize, r.bytesize.to_f/s.bytesize
107
+ end
108
+ }
109
+ else
110
+ s = open(i, 'rb'){|f| f.read}
111
+ r = LZSS.compress(s)
112
+ d = LZSS.expand(r)
113
+ dp "%20s: %p, size=%6d, rate=%f", i, s==d, r.bytesize, r.bytesize.to_f/s.bytesize
114
+ end
115
+ }
116
+
117
+ # s = open('resources/win32.ico', 'rb'){|f| f.read}
118
+ s ="What is this? This is a pen. Apple pen."
119
+
120
+ p s.bytesize
121
+ r = LZSS.compress(s)
122
+ p r.bytesize
123
+
124
+ d = LZSS.expand(r)
125
+ p s == d || d
126
+ end if $0 == __FILE__
@@ -0,0 +1,142 @@
1
+ # Common module and constants for Scrollbar
2
+ require 'wrb'
3
+
4
+ module WR
5
+ # scroll info
6
+ SB_HORZ = 0
7
+ SB_VERT = 1
8
+ SB_CTL = 2
9
+ SB_BOTH = 3
10
+
11
+ SB_LINEUP = 0
12
+ SB_LINELEFT = 0
13
+ SB_LINEDOWN = 1
14
+ SB_LINERIGHT = 1
15
+ SB_PAGEUP = 2
16
+ SB_PAGELEFT = 2
17
+ SB_PAGEDOWN = 3
18
+ SB_PAGERIGHT = 3
19
+ SB_THUMBPOSITION = 4
20
+ SB_THUMBTRACK = 5
21
+ SB_TOP = 6
22
+ SB_LEFT = 6
23
+ SB_BOTTOM = 7
24
+ SB_RIGHT = 7
25
+ SB_ENDSCROLL = 8
26
+
27
+ SBM_SETPOS = 0x00E0
28
+ SBM_GETPOS = 0x00E1
29
+ SBM_SETRANGE = 0x00E2
30
+ SBM_SETRANGEREDRAW = 0x00E6
31
+ SBM_GETRANGE = 0x00E3
32
+ SBM_ENABLE_ARROWS = 0x00E4
33
+ SBM_SETSCROLLINFO = 0x00E9
34
+ SBM_GETSCROLLINFO = 0x00EA
35
+ SBM_GETSCROLLBARINFO = 0x00EB
36
+
37
+ SIF_RANGE = 0x0001
38
+ SIF_PAGE = 0x0002
39
+ SIF_POS = 0x0004
40
+ SIF_DISABLENOSCROLL = 0x0008
41
+ SIF_TRACKPOS = 0x0010
42
+ SIF_ALL = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS
43
+
44
+ module ScrollInfo
45
+ SCROLLINFO = API.defstruct "
46
+ UINT cbSize;
47
+ UINT fMask;
48
+ int nMin;
49
+ int nMax;
50
+ UINT nPage;
51
+ int nPos;
52
+ int nTrackPos;"
53
+
54
+ RWin::API.loadlib "user32.dll"
55
+ API.defun "GetScrollInfo(HWND hWnd, int fnBar, LPSCROLLINFO lpsi)"
56
+ API.defun "SetScrollInfo(HWND hwnd,int nBar,LPCSCROLLINFO lpsi,WINBOOL redraw)"
57
+ API.defun "ScrollDC(HDC hDC, int dx, int dy, RECT *lprcScroll, RECT *lprcClip, HRGN hrgnUpdate, LPRECT lprcUpdate)"
58
+ API.defun "ScrollWindowEx(HWND hWnd, int dx, int dy, RECT *prcScroll, RECT *prcClip, HRGN hrgnUpdate, LPRECT prcUpdate, UINT flags)"
59
+
60
+ def vscrollrange()
61
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_RANGE]
62
+ API.GetScrollInfo(self._hwnd, SB_VERT, lpsi)
63
+ [lpsi.nMin, lpsi.nMax]
64
+ end
65
+ def vscrollrange=(*args)
66
+ min, max = args[0].is_a?(Array) ? args[0] : [0, args[0]]
67
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_RANGE, min, max]
68
+ API.SetScrollInfo(self._hwnd, SB_VERT, lpsi, 1)
69
+ end
70
+
71
+ def vscrollpos()
72
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS]
73
+ API.GetScrollInfo(self._hwnd, SB_VERT, lpsi)
74
+ lpsi.nPos
75
+ end
76
+ def vscrollpos=(ps)
77
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS, nil, nil, nil, ps]
78
+ API.SetScrollInfo(self._hwnd, SB_VERT, lpsi, 1)
79
+ end
80
+
81
+ def vscrollpage()
82
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_PAGE]
83
+ API.GetScrollInfo(self._hwnd, SB_VERT, lpsi)
84
+ lpsi.nPage
85
+ end
86
+ def vscrollpage=(pg)
87
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_PAGE, nil, nil, pg]
88
+ API.SetScrollInfo(self._hwnd, SB_VERT, lpsi, 1)
89
+ end
90
+
91
+ def vscrolltrackpos()
92
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_TRACKPOS]
93
+ API.GetScrollInfo(self._hwnd, SB_VERT, lpsi)
94
+ lpsi.nTrackPos
95
+ end
96
+ def vscrolltrackpos=(tps)
97
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS, nil, nil, nil, nil, tps]
98
+ API.SetScrollInfo(self._hwnd, SB_VERT, lpsi, 1)
99
+ end
100
+
101
+ def hscrollrange()
102
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_RANGE]
103
+ API.GetScrollInfo(self._hwnd, SB_HORZ, lpsi)
104
+ [lpsi.nMin, lpsi.nMax]
105
+ end
106
+ def hscrollrange=(*args)
107
+ min, max = args[0].is_a?(Array) ? args[0] : [0, args[0]]
108
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_RANGE, min, max]
109
+ API.SetScrollInfo(self._hwnd, SB_HORZ, lpsi, 1)
110
+ end
111
+
112
+ def hscrollpos()
113
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS]
114
+ API.GetScrollInfo(self._hwnd, SB_HORZ, lpsi)
115
+ lpsi.nPos
116
+ end
117
+ def hscrollpos=(ps)
118
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS, nil, nil, nil, ps]
119
+ API.SetScrollInfo(self._hwnd, SB_HORZ, lpsi, 1)
120
+ end
121
+
122
+ def hscrollpage()
123
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_PAGE]
124
+ API.GetScrollInfo(self._hwnd, SB_HORZ, lpsi)
125
+ lpsi.nPage
126
+ end
127
+ def hscrollpage=(pg)
128
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_PAGE, nil, nil, pg]
129
+ API.SetScrollInfo(self._hwnd, SB_HORZ, lpsi, 1)
130
+ end
131
+
132
+ def hscrolltrackpos()
133
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_TRACKPOS]
134
+ API.GetScrollInfo(self._hwnd, SB_HORZ, lpsi)
135
+ lpsi.nTrackPos
136
+ end
137
+ def hscrolltrackpos=(tps)
138
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS, nil, nil, nil, nil, tps]
139
+ API.SetScrollInfo(self._hwnd, SB_HORZ, lpsi, 1)
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,634 @@
1
+ # Common modules and constants for Form and Dialog
2
+
3
+ require 'wrb'
4
+
5
+ module WR
6
+ module RC
7
+ # for GetSysytemMetrics()
8
+ SM_CXSCREEN = 0
9
+ SM_CYSCREEN = 1
10
+ SM_CXVSCROLL = 2
11
+ SM_CYHSCROLL = 3
12
+ SM_CYCAPTION = 4
13
+ SM_CXBORDER = 5
14
+ SM_CYBORDER = 6
15
+ SM_CXDLGFRAME = 7
16
+ SM_CYDLGFRAME = 8
17
+ SM_CYVTHUMB = 9
18
+ SM_CXHTHUMB = 10
19
+ SM_CXICON = 11
20
+ SM_CYICON = 12
21
+ SM_CXCURSOR = 13
22
+ SM_CYCURSOR = 14
23
+ SM_CYMENU = 15
24
+ SM_CXFULLSCREEN = 16
25
+ SM_CYFULLSCREEN = 17
26
+ SM_CYKANJIWINDOW = 18
27
+ SM_MOUSEPRESENT = 19
28
+ SM_CYVSCROLL = 20
29
+ SM_CXHSCROLL = 21
30
+ SM_DEBUG = 22
31
+ SM_SWAPBUTTON = 23
32
+ SM_RESERVED1 = 24
33
+ SM_RESERVED2 = 25
34
+ SM_RESERVED3 = 26
35
+ SM_RESERVED4 = 27
36
+ SM_CXMIN = 28
37
+ SM_CYMIN = 29
38
+ SM_CXSIZE = 30
39
+ SM_CYSIZE = 31
40
+ SM_CXFRAME = 32
41
+ SM_CYFRAME = 33
42
+ SM_CXMINTRACK = 34
43
+ SM_CYMINTRACK = 35
44
+ SM_CXDOUBLECLK = 36
45
+ SM_CYDOUBLECLK = 37
46
+ SM_CXICONSPACING = 38
47
+ SM_CYICONSPACING = 39
48
+ SM_MENUDROPALIGNMENT = 40
49
+ SM_PENWINDOWS = 41
50
+ SM_DBCSENABLED = 42
51
+ SM_CMOUSEBUTTONS = 43
52
+
53
+ SM_CXFIXEDFRAME = SM_CXDLGFRAME
54
+ SM_CYFIXEDFRAME = SM_CYDLGFRAME
55
+ SM_CXSIZEFRAME = SM_CXFRAME
56
+ SM_CYSIZEFRAME = SM_CYFRAME
57
+
58
+ SM_SECURE = 44
59
+ SM_CXEDGE = 45
60
+ SM_CYEDGE = 46
61
+ SM_CXMINSPACING = 47
62
+ SM_CYMINSPACING = 48
63
+ SM_CXSMICON = 49
64
+ SM_CYSMICON = 50
65
+ SM_CYSMCAPTION = 51
66
+ SM_CXSMSIZE = 52
67
+ SM_CYSMSIZE = 53
68
+ SM_CXMENUSIZE = 54
69
+ SM_CYMENUSIZE = 55
70
+ SM_ARRANGE = 56
71
+ SM_CXMINIMIZED = 57
72
+ SM_CYMINIMIZED = 58
73
+ SM_CXMAXTRACK = 59
74
+ SM_CYMAXTRACK = 60
75
+ SM_CXMAXIMIZED = 61
76
+ SM_CYMAXIMIZED = 62
77
+ SM_NETWORK = 63
78
+ SM_CLEANBOOT = 67
79
+ SM_CXDRAG = 68
80
+ SM_CYDRAG = 69
81
+ SM_SHOWSOUNDS = 70
82
+ SM_CXMENUCHECK = 71
83
+ SM_CYMENUCHECK = 72
84
+ SM_SLOWMACHINE = 73
85
+ SM_MIDEASTENABLED = 74
86
+ SM_MOUSEWHEELPRESENT = 75
87
+ SM_XVIRTUALSCREEN = 76
88
+ SM_YVIRTUALSCREEN = 77
89
+ SM_CXVIRTUALSCREEN = 78
90
+ SM_CYVIRTUALSCREEN = 79
91
+ SM_CMONITORS = 80
92
+ SM_SAMEDISPLAYFORMAT = 81
93
+ SM_IMMENABLED = 82
94
+ SM_CXFOCUSBORDER = 83
95
+ SM_CYFOCUSBORDER = 84
96
+ SM_TABLETPC = 86
97
+ SM_MEDIACENTER = 87
98
+ SM_STARTER = 88
99
+ SM_SERVERR2 = 89
100
+ SM_CMETRICS = 90
101
+
102
+ SM_REMOTESESSION = 0x1000
103
+ SM_SHUTTINGDOWN = 0x2000
104
+ SM_REMOTECONTROL = 0x2001
105
+ SM_CARETBLINKINGENABLED = 0x2002
106
+
107
+ # for SystemParameterInfo()
108
+ SPI_GETBEEP = 0x0001
109
+ SPI_SETBEEP = 0x0002
110
+ SPI_GETMOUSE = 0x0003
111
+ SPI_SETMOUSE = 0x0004
112
+ SPI_GETBORDER = 0x0005
113
+ SPI_SETBORDER = 0x0006
114
+ SPI_GETKEYBOARDSPEED = 0x000A
115
+ SPI_SETKEYBOARDSPEED = 0x000B
116
+ SPI_LANGDRIVER = 0x000C
117
+ SPI_ICONHORIZONTALSPACING = 0x000D
118
+ SPI_GETSCREENSAVETIMEOUT = 0x000E
119
+ SPI_SETSCREENSAVETIMEOUT = 0x000F
120
+ SPI_GETSCREENSAVEACTIVE = 0x0010
121
+ SPI_SETSCREENSAVEACTIVE = 0x0011
122
+ SPI_GETGRIDGRANULARITY = 0x0012
123
+ SPI_SETGRIDGRANULARITY = 0x0013
124
+ SPI_SETDESKWALLPAPER = 0x0014
125
+ SPI_SETDESKPATTERN = 0x0015
126
+ SPI_GETKEYBOARDDELAY = 0x0016
127
+ SPI_SETKEYBOARDDELAY = 0x0017
128
+ SPI_ICONVERTICALSPACING = 0x0018
129
+ SPI_GETICONTITLEWRAP = 0x0019
130
+ SPI_SETICONTITLEWRAP = 0x001A
131
+ SPI_GETMENUDROPALIGNMENT = 0x001B
132
+ SPI_SETMENUDROPALIGNMENT = 0x001C
133
+ SPI_SETDOUBLECLKWIDTH = 0x001D
134
+ SPI_SETDOUBLECLKHEIGHT = 0x001E
135
+ SPI_GETICONTITLELOGFONT = 0x001F
136
+ SPI_SETDOUBLECLICKTIME = 0x0020
137
+ SPI_SETMOUSEBUTTONSWAP = 0x0021
138
+ SPI_SETICONTITLELOGFONT = 0x0022
139
+ SPI_GETFASTTASKSWITCH = 0x0023
140
+ SPI_SETFASTTASKSWITCH = 0x0024
141
+ SPI_SETDRAGFULLWINDOWS = 0x0025
142
+ SPI_GETDRAGFULLWINDOWS = 0x0026
143
+ SPI_GETNONCLIENTMETRICS = 0x0029
144
+ SPI_SETNONCLIENTMETRICS = 0x002A
145
+ SPI_GETMINIMIZEDMETRICS = 0x002B
146
+ SPI_SETMINIMIZEDMETRICS = 0x002C
147
+ SPI_GETICONMETRICS = 0x002D
148
+ SPI_SETICONMETRICS = 0x002E
149
+ SPI_SETWORKAREA = 0x002F
150
+ SPI_GETWORKAREA = 0x0030
151
+ SPI_SETPENWINDOWS = 0x0031
152
+
153
+ SPI_GETHIGHCONTRAST = 0x0042
154
+ SPI_SETHIGHCONTRAST = 0x0043
155
+ SPI_GETKEYBOARDPREF = 0x0044
156
+ SPI_SETKEYBOARDPREF = 0x0045
157
+ SPI_GETSCREENREADER = 0x0046
158
+ SPI_SETSCREENREADER = 0x0047
159
+ SPI_GETANIMATION = 0x0048
160
+ SPI_SETANIMATION = 0x0049
161
+ SPI_GETFONTSMOOTHING = 0x004A
162
+ SPI_SETFONTSMOOTHING = 0x004B
163
+ SPI_SETDRAGWIDTH = 0x004C
164
+ SPI_SETDRAGHEIGHT = 0x004D
165
+ SPI_SETHANDHELD = 0x004E
166
+ SPI_GETLOWPOWERTIMEOUT = 0x004F
167
+ SPI_GETPOWEROFFTIMEOUT = 0x0050
168
+ SPI_SETLOWPOWERTIMEOUT = 0x0051
169
+ SPI_SETPOWEROFFTIMEOUT = 0x0052
170
+ SPI_GETLOWPOWERACTIVE = 0x0053
171
+ SPI_GETPOWEROFFACTIVE = 0x0054
172
+ SPI_SETLOWPOWERACTIVE = 0x0055
173
+ SPI_SETPOWEROFFACTIVE = 0x0056
174
+ SPI_SETCURSORS = 0x0057
175
+ SPI_SETICONS = 0x0058
176
+ SPI_GETDEFAULTINPUTLANG = 0x0059
177
+ SPI_SETDEFAULTINPUTLANG = 0x005A
178
+ SPI_SETLANGTOGGLE = 0x005B
179
+ SPI_GETWINDOWSEXTENSION = 0x005C
180
+ SPI_SETMOUSETRAILS = 0x005D
181
+ SPI_GETMOUSETRAILS = 0x005E
182
+ SPI_SETSCREENSAVERRUNNING = 0x0061
183
+ SPI_SCREENSAVERRUNNING = SPI_SETSCREENSAVERRUNNING
184
+ SPI_GETFILTERKEYS = 0x0032
185
+ SPI_SETFILTERKEYS = 0x0033
186
+ SPI_GETTOGGLEKEYS = 0x0034
187
+ SPI_SETTOGGLEKEYS = 0x0035
188
+ SPI_GETMOUSEKEYS = 0x0036
189
+ SPI_SETMOUSEKEYS = 0x0037
190
+ SPI_GETSHOWSOUNDS = 0x0038
191
+ SPI_SETSHOWSOUNDS = 0x0039
192
+ SPI_GETSTICKYKEYS = 0x003A
193
+ SPI_SETSTICKYKEYS = 0x003B
194
+ SPI_GETACCESSTIMEOUT = 0x003C
195
+ SPI_SETACCESSTIMEOUT = 0x003D
196
+ SPI_GETSERIALKEYS = 0x003E
197
+ SPI_SETSERIALKEYS = 0x003F
198
+ SPI_GETSOUNDSENTRY = 0x0040
199
+ SPI_SETSOUNDSENTRY = 0x0041
200
+ SPI_GETSNAPTODEFBUTTON = 0x005F
201
+ SPI_SETSNAPTODEFBUTTON = 0x0060
202
+ SPI_GETMOUSEHOVERWIDTH = 0x0062
203
+ SPI_SETMOUSEHOVERWIDTH = 0x0063
204
+ SPI_GETMOUSEHOVERHEIGHT = 0x0064
205
+ SPI_SETMOUSEHOVERHEIGHT = 0x0065
206
+ SPI_GETMOUSEHOVERTIME = 0x0066
207
+ SPI_SETMOUSEHOVERTIME = 0x0067
208
+ SPI_GETWHEELSCROLLLINES = 0x0068
209
+ SPI_SETWHEELSCROLLLINES = 0x0069
210
+ SPI_GETMENUSHOWDELAY = 0x006A
211
+ SPI_SETMENUSHOWDELAY = 0x006B
212
+ SPI_GETSHOWIMEUI = 0x006E
213
+ SPI_SETSHOWIMEUI = 0x006F
214
+ SPI_GETMOUSESPEED = 0x0070
215
+ SPI_SETMOUSESPEED = 0x0071
216
+ SPI_GETSCREENSAVERRUNNING = 0x0072
217
+ SPI_GETDESKWALLPAPER = 0x0073
218
+
219
+ #if (_WIN32_WINNT >= = 0x0600)
220
+ # SPI_GETAUDIODESCRIPTION = 0x0074
221
+ # SPI_SETAUDIODESCRIPTION = 0x0075
222
+ #endif
223
+
224
+ SPI_GETACTIVEWINDOWTRACKING = 0x1000
225
+ SPI_SETACTIVEWINDOWTRACKING = 0x1001
226
+ SPI_GETMENUANIMATION = 0x1002
227
+ SPI_SETMENUANIMATION = 0x1003
228
+ SPI_GETCOMBOBOXANIMATION = 0x1004
229
+ SPI_SETCOMBOBOXANIMATION = 0x1005
230
+ SPI_GETLISTBOXSMOOTHSCROLLING = 0x1006
231
+ SPI_SETLISTBOXSMOOTHSCROLLING = 0x1007
232
+ SPI_GETGRADIENTCAPTIONS = 0x1008
233
+ SPI_SETGRADIENTCAPTIONS = 0x1009
234
+ SPI_GETKEYBOARDCUES = 0x100A
235
+ SPI_SETKEYBOARDCUES = 0x100B
236
+ SPI_GETMENUUNDERLINES = SPI_GETKEYBOARDCUES
237
+ SPI_SETMENUUNDERLINES = SPI_SETKEYBOARDCUES
238
+ SPI_GETACTIVEWNDTRKZORDER = 0x100C
239
+ SPI_SETACTIVEWNDTRKZORDER = 0x100D
240
+ SPI_GETHOTTRACKING = 0x100E
241
+ SPI_SETHOTTRACKING = 0x100F
242
+ SPI_GETMENUFADE = 0x1012
243
+ SPI_SETMENUFADE = 0x1013
244
+ SPI_GETSELECTIONFADE = 0x1014
245
+ SPI_SETSELECTIONFADE = 0x1015
246
+ SPI_GETTOOLTIPANIMATION = 0x1016
247
+ SPI_SETTOOLTIPANIMATION = 0x1017
248
+ SPI_GETTOOLTIPFADE = 0x1018
249
+ SPI_SETTOOLTIPFADE = 0x1019
250
+ SPI_GETCURSORSHADOW = 0x101A
251
+ SPI_SETCURSORSHADOW = 0x101B
252
+ SPI_GETMOUSESONAR = 0x101C
253
+ SPI_SETMOUSESONAR = 0x101D
254
+ SPI_GETMOUSECLICKLOCK = 0x101E
255
+ SPI_SETMOUSECLICKLOCK = 0x101F
256
+ SPI_GETMOUSEVANISH = 0x1020
257
+ SPI_SETMOUSEVANISH = 0x1021
258
+ SPI_GETFLATMENU = 0x1022
259
+ SPI_SETFLATMENU = 0x1023
260
+ SPI_GETDROPSHADOW = 0x1024
261
+ SPI_SETDROPSHADOW = 0x1025
262
+ SPI_GETBLOCKSENDINPUTRESETS = 0x1026
263
+ SPI_SETBLOCKSENDINPUTRESETS = 0x1027
264
+ SPI_GETUIEFFECTS = 0x103E
265
+ SPI_SETUIEFFECTS = 0x103F
266
+ SPI_GETFOREGROUNDLOCKTIMEOUT = 0x2000
267
+ SPI_SETFOREGROUNDLOCKTIMEOUT = 0x2001
268
+ SPI_GETACTIVEWNDTRKTIMEOUT = 0x2002
269
+ SPI_SETACTIVEWNDTRKTIMEOUT = 0x2003
270
+ SPI_GETFOREGROUNDFLASHCOUNT = 0x2004
271
+ SPI_SETFOREGROUNDFLASHCOUNT = 0x2005
272
+ SPI_GETCARETWIDTH = 0x2006
273
+ SPI_SETCARETWIDTH = 0x2007
274
+ SPI_GETMOUSECLICKLOCKTIME = 0x2008
275
+ SPI_SETMOUSECLICKLOCKTIME = 0x2009
276
+ SPI_GETFONTSMOOTHINGTYPE = 0x200A
277
+ SPI_SETFONTSMOOTHINGTYPE = 0x200B
278
+
279
+ FE_FONTSMOOTHINGSTANDARD = 0x0001
280
+ FE_FONTSMOOTHINGCLEARTYPE = 0x0002
281
+ FE_FONTSMOOTHINGDOCKING = 0x8000
282
+
283
+ SPI_GETFONTSMOOTHINGCONTRAST = 0x200C
284
+ SPI_SETFONTSMOOTHINGCONTRAST = 0x200D
285
+ SPI_GETFOCUSBORDERWIDTH = 0x200E
286
+ SPI_SETFOCUSBORDERWIDTH = 0x200F
287
+ SPI_GETFOCUSBORDERHEIGHT = 0x2010
288
+ SPI_SETFOCUSBORDERHEIGHT = 0x2011
289
+ SPI_GETFONTSMOOTHINGORIENTATION = 0x2012
290
+ SPI_SETFONTSMOOTHINGORIENTATION = 0x2013
291
+
292
+ FE_FONTSMOOTHINGORIENTATIONBGR = 0x0000
293
+ FE_FONTSMOOTHINGORIENTATIONRGB = 0x0001
294
+
295
+ SPIF_UPDATEINIFILE = 0x0001
296
+ SPIF_SENDWININICHANGE = 0x0002
297
+ SPIF_SENDCHANGE = SPIF_SENDWININICHANGE
298
+
299
+ # for GetStockObject()
300
+ OEM_FIXED_FONT = 10
301
+ ANSI_FIXED_FONT = 11
302
+ ANSI_VAR_FONT = 12
303
+ SYSTEM_FONT = 13
304
+ DEVICE_DEFAULT_FONT = 14
305
+ SYSTEM_FIXED_FONT = 16
306
+ DEFAULT_GUI_FONT = 17
307
+ end
308
+
309
+ module ModKeyAccel
310
+ FVIRTKEY = 0x01
311
+ FNOINVERT = 0x02
312
+ FSHIFT = 0x04
313
+ FCONTROL = 0x08
314
+ FALT = 0x10
315
+ FVirt = {"Shift"=>FSHIFT, "Ctrl"=>FCONTROL, "Alt" =>FALT}
316
+
317
+ VFuncKey = {
318
+ "F1"=>0x70, "F2"=>0x71, "F3"=>0x72, "F4"=>0x73,"F5"=>0x74, "F6"=>0x75,
319
+ "F7"=>0x76, "F8"=>0x77, "F9"=>0x78, "F10"=>0x79, "F11"=>0x7a, "F12"=>0x7b,
320
+ "Insert"=>0x2d, "Delete"=>0x2e, "PageUp"=>0x21, "PageDown"=>0x22,
321
+ "End"=>0x23, "Home"=>0x24
322
+ }
323
+
324
+ def parse_keyaccel(txt, cmd=nil)
325
+ fvirt = FVIRTKEY
326
+ ar = txt.strip.split(/\+/)
327
+ if (str=ar.pop).length > 1
328
+ vk = VFuncKey[str]
329
+ raise "Illegal key `#{str}'" unless vk
330
+ else
331
+ vk = str.upcase.unpack('c')[0]
332
+ end
333
+ ar.each{|i| fvirt += FVirt[i.strip] || raise("Illegal virtual key `#{i}'")}
334
+ [fvirt, vk, cmd]
335
+ end
336
+ module_function :parse_keyaccel
337
+ end
338
+
339
+ module ModHotKey
340
+ MOD_ALT = 0x0001
341
+ MOD_CONTROL = 0x0002
342
+ MOD_SHIFT = 0x0004
343
+ MOD_WIN = 0x0008
344
+ MOD_NOREPEAT = 0x4000
345
+ Modifier = {"Shift" => MOD_SHIFT, "Ctrl" => MOD_CONTROL, "Alt" => MOD_ALT}
346
+
347
+ def self.parse_hotkey(txt, no_repeat=true)
348
+ return nil if !txt || txt.empty?
349
+ modifier = no_repeat ? MOD_NOREPEAT : 0
350
+ key = nil
351
+ ar = txt.strip.split(/\+/)
352
+ if (str=ar.pop).length > 1
353
+ unless vk=ModKeyAccel::VFuncKey[str]
354
+ raise "Illegal key `#{str}'"
355
+ end
356
+ else
357
+ vk = str.upcase.unpack('c')[0]
358
+ end
359
+ ar.each{|ii|
360
+ raise "Illegal key `#{ii}'" unless n=Modifier[ii]
361
+ modifier |= n
362
+ }
363
+ [modifier, vk]
364
+ end
365
+ end # ModHotKey
366
+
367
+ module ModToplevelWin # for Form, Dialog
368
+ NONCLIENTMETRICS = API.defstruct "
369
+ UINT cbSize;
370
+ int iBorderWidth;
371
+ int iScrollWidth;
372
+ int iScrollHeight;
373
+ int iCaptionWidth;
374
+ int iCaptionHeight;
375
+ LOGFONT lfCaptionFont;
376
+ int iSmCaptionWidth;
377
+ int iSmCaptionHeight;
378
+ LOGFONT lfSmCaptionFont;
379
+ int iMenuWidth;
380
+ int iMenuHeight;
381
+ LOGFONT lfMenuFont;
382
+ LOGFONT lfStatusFont;
383
+ LOGFONT lfMessageFont;
384
+ int iPaddedBorderWidth;"
385
+
386
+ ncm = NONCLIENTMETRICS[NONCLIENTMETRICS::Size]
387
+ ncm.lfMenuFont = API::LOGFONT.new
388
+ API.SystemParametersInfo(RC::SPI_GETNONCLIENTMETRICS, 0, ncm, 0);
389
+ DefaultFont = Font.new(ncm.lfMenuFont)
390
+
391
+ def self.included(mod)
392
+ def mod.start()
393
+ self.new.create
394
+ APP.automsgloop
395
+ end
396
+
397
+ def mod.start_as_form()
398
+ self.new.create
399
+ APP.msgloop
400
+ end
401
+ def mod.start_as_dialog()
402
+ self.new.create
403
+ APP.dlgmsgloop
404
+ end
405
+ def mod.start_as_auto()
406
+ self.new.create
407
+ APP.automsgloop
408
+ end
409
+ end
410
+
411
+ include RC
412
+ WinStyles = {
413
+ :thickframe => WS_THICKFRAME,
414
+ :sysmenu => WS_SYSMENU,
415
+ :dlgframe => WS_DLGFRAME,
416
+ :border => WS_BORDER,
417
+ :maximizebox => WS_MAXIMIZEBOX,
418
+ :minimizebox => WS_MINIMIZEBOX,
419
+ :clipchldren => WS_CLIPCHILDREN,
420
+ :hscroll => WS_HSCROLL,
421
+ :vscroll => WS_VSCROLL,
422
+ # :clipsiblngs => WS_CLIPSIBLINGS
423
+ # :sizebox => WS_SIZEBOX,
424
+ }
425
+
426
+ DefaultEvents = []
427
+
428
+ include ModParent
429
+
430
+ LWA_COLORKEY = 1
431
+ LWA_ALPHA = 2
432
+
433
+ API.defun "SetLayeredWindowAttributes(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags)"
434
+ API.defun "GetLayeredWindowAttributes(HWND hwnd,COLORREF *pcrKey,BYTE *pbAlpha,
435
+ DWORD *pdwFlags)"
436
+ API.defun "AdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle)"
437
+ API.defun "GetMenu(HWND hwnd)"
438
+ API.defun "GetMenuItemCount(HMENU hmenu)"
439
+ API.defun "SetActiveWindow(HWND hWnd)"
440
+
441
+ # Returns self.
442
+ def get_toplevel_win()
443
+ self
444
+ end
445
+
446
+ # Retreives acceptable events as array of symbols.
447
+ def acceptable_events()
448
+ @_acceptable_events ||= {
449
+ :activate => [WM_ACTIVATE, 'hi']
450
+ }.update(ModBaseWin::SubclassedHandlers)
451
+ end
452
+
453
+ # Wrapper of AdjustWindowRectEx() function.
454
+ def adjust_windowsize(w, h)
455
+ rc = API::RECT[0, 0, w, h]
456
+ hmenu = API.GetMenu(self._hwnd)
457
+ ifmenu = (hmenu!=0 && API.GetMenuItemCount(hmenu)>0) ? 1 : 0
458
+ API.AdjustWindowRectEx(rc, style, ifmenu, exstyle)
459
+ [rc.right-rc.left, rc.bottom-rc.top]
460
+ end
461
+
462
+ # clientsize=(client-width, client-heigt)
463
+ # Resizes this window according to given client size<br>
464
+ # Give two integers as client-width and client-height.
465
+ def clientsize=(arg)
466
+ _w, _h = adjust_windowsize(*arg)
467
+ self.resize(_w, _h)
468
+ end
469
+
470
+ # Sets icon into this window.
471
+ def icon=(ico)
472
+ raise ArgumentError, "argument must be RWin::Icon", caller(1) unless ico.is_a? RWin::Icon
473
+ @_icon = ico # keep Icon object in this window
474
+ SendMessage(WM_SETICON, ICON_SMALL, ico._hicon) if alive?
475
+ end
476
+
477
+ # Gets transparency of this window.
478
+ # <br>Retrurns an integer between 0 to 255.
479
+ def transparency()
480
+ return nil if (exstyle&WS_EX_LAYERED) == 0
481
+ if alive?
482
+ API.GetLayeredWindowAttributes(_hwnd, nil, opacity=API::BYTE[1], nil)
483
+ 255 - opacity[0]
484
+ else
485
+ @_transparency
486
+ end
487
+ end
488
+
489
+ # Sets transparency of this window. <br>
490
+ # Give an integer between 0 to 255 as <i>tp</i>.
491
+ def transparency=(tp)
492
+ if tp.nil?
493
+ @_transparency=nil
494
+ return self.exstyle &= ~WS_EX_LAYERED
495
+ else
496
+ self.exstyle |= WS_EX_LAYERED
497
+ end
498
+ if alive?
499
+ API.SetLayeredWindowAttributes(_hwnd, nil, 255-tp, LWA_ALPHA)
500
+ else
501
+ @_transparency = tp
502
+ end
503
+ end
504
+
505
+ # Gets traniparent color. <br>
506
+ # Returns an integer as RGB color.
507
+ def transparentcolor()
508
+ return nil if (exstyle&WS_EX_LAYERED) == 0
509
+ if alive?
510
+ API.GetLayeredWindowAttributes(_hwnd, clr=API::DWORD[1], nil, nil)
511
+ clr[0]
512
+ else
513
+ @_transparentcolor
514
+ end
515
+ end
516
+
517
+ # Sets traniparent color. <br>
518
+ # Give an integer as RGB color.
519
+ def transparentcolor=(clr)
520
+ if clr.nil?
521
+ @_transparentcolor=nil
522
+ return self.exstyle &= ~WS_EX_LAYERED
523
+ else
524
+ self.exstyle |= WS_EX_LAYERED
525
+ end
526
+ if alive?
527
+ API.SetLayeredWindowAttributes(_hwnd, clr.to_i, nil, LWA_COLORKEY)
528
+ else
529
+ @_transparentcolor = clr
530
+ end
531
+ end
532
+
533
+ # Retrives whether a size box is shown in the title bar.<br>
534
+ # Returns true/false.
535
+ def sizebox()
536
+ (self.style & WS_SIZEBOX) > 0
537
+ end
538
+
539
+ # Sets whether a size box is shown in the title bar.<br>
540
+ # Give true/false as <i>f</i>.
541
+ def sizebox=(f)
542
+ f ? self.style |= WS_SIZEBOX : self.style &= ~WS_SIZEBOX
543
+ end
544
+
545
+ # Retrives whether a maximize box is shown in the title bar.<br>
546
+ # Returns true/false.
547
+ def maximizebox()
548
+ (self.style & WS_MAXIMIZEBOX) > 0
549
+ end
550
+ # Sets whether a maximize box is shown in the title bar.<br>
551
+ # Give true/false as <i>f</i>.
552
+ def maximizebox=(f)
553
+ f ? self.style |= WS_MAXIMIZEBOX : self.style &= ~WS_MAXIMIZEBOX
554
+ end
555
+
556
+ # Retrives whether a minmize box is shown in the title bar.<br>
557
+ # Returns true/false.
558
+ def minimizebox()
559
+ (self.style & WS_MINIMIZEBOX) > 0
560
+ end
561
+ # Sets whether a minmize box is shown in the title bar.<br>
562
+ # Give true/false as <i>f</i>.
563
+ def minimizebox=(f)
564
+ f ? self.style |= WS_MINIMIZEBOX : self.style &= ~WS_MINIMIZEBOX
565
+ end
566
+
567
+ # Activates this window.<br>
568
+ # Returns previous window.
569
+ def activate()
570
+ APP.hwnd2ref(API.SetActiveWindow(self._hwnd))
571
+ end
572
+
573
+ # Shows a message box that is owned by this window.
574
+ def MessageBox(text, caption, type=0)
575
+ API.MessageBox(self._hwnd, _I(text.to_s), caption.to_s, type.to_i)
576
+ end
577
+ alias msgbox MessageBox
578
+
579
+ class << Hotkeys=Hash.new
580
+ attr_accessor :owner_win
581
+ end
582
+
583
+ # Registers a paticular key code as key-accelarator to accelarator table of this window.
584
+ def register_keyaccel(accel, cmd)
585
+ fv, vk = ModKeyAccel.parse_keyaccel(accel, cmd)
586
+ kk = MAKELPARAM(fv, vk)
587
+ @_keyaccels ||= {}
588
+ if v=@_keyaccels[kk]
589
+ raise "`#{accel}' was already asigned to #{v}"
590
+ else
591
+ @_keyaccels[kk] = cmd
592
+ end
593
+ if alive? && @_keyaccels
594
+ r = []
595
+ @_keyaccels.each{|k, v| r << (SPLITPARAM(k) << v)}
596
+ set_accelerator(r)
597
+ end
598
+ end
599
+
600
+ # Removes a key code from accelarator table of this window.
601
+ def unregister_keyaccel(accel)
602
+ return unless @_keyaccels
603
+ fv, vk = ModKeyAccel.parse_keyaccel(accel)
604
+ kk = MAKELPARAM(fv, vk)
605
+ return unless prm=@_keyaccels[kk]
606
+ @_keyaccels.delete(kk)
607
+ if alive? && @_keyaccels
608
+ r = []
609
+ @_keyaccels.each{|k, v| r << (SPLITPARAM(k) << v)}
610
+ set_accelerator(r.empty? ? nil : r)
611
+ end
612
+ end
613
+
614
+ # Registers a paticular key code as hot key of this application.
615
+ def register_hotkey(cmd, hotkey)
616
+ register_event(WM_HOTKEY, '__hotkey__', 'ih') if !event_registered?(WM_HOTKEY,'__hotkey__')
617
+ mod, vk = ModHotKey.parse_hotkey(hotkey)
618
+ RegisterHotKey(cmd, mod, vk)
619
+ end
620
+
621
+ # Not implemented yet.
622
+ def unregister_hotkey(mod, vk)
623
+ raise "`unregister_hotkey' is not impremented yet"
624
+ end
625
+
626
+ private
627
+ def __getfont__() #dpp @_font._hfont
628
+ CancelDefWindowProc(@_font ? @_font._hfont : 0)
629
+ end
630
+ def __hotkey__(cmd, mod, vk)
631
+ SendMessage(WM_COMMAND, cmd, 0)
632
+ end
633
+ end
634
+ end