wrb 2.0.0

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