wrb 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README +28 -0
- data/Rakefile +66 -0
- data/bin/wrb +41 -0
- data/bin/wrb.bat +6 -0
- data/ext/rwin/aatree.c +192 -0
- data/ext/rwin/aatree.h +55 -0
- data/ext/rwin/extconf.rb +47 -0
- data/ext/rwin/rw_api.c +2058 -0
- data/ext/rwin/rw_devices.c +215 -0
- data/ext/rwin/rw_gdiplus.h +278 -0
- data/ext/rwin/rw_graphics.c +1583 -0
- data/ext/rwin/rw_resources.c +1988 -0
- data/ext/rwin/rw_ubfuncs.c +281 -0
- data/ext/rwin/rw_windows.c +1936 -0
- data/ext/rwin/rwin.c +451 -0
- data/ext/rwin/rwin.h +442 -0
- data/lib/rwin.rb +820 -0
- data/lib/wrb.rb +20 -0
- data/lib/wrb/applications/frmdesigner/angle.cur +0 -0
- data/lib/wrb/applications/frmdesigner/angle2.cur +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Button.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Button.rb +34 -0
- data/lib/wrb/applications/frmdesigner/controls/Checkbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Checkbox.rb +10 -0
- data/lib/wrb/applications/frmdesigner/controls/Combobox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Combobox.rb +88 -0
- data/lib/wrb/applications/frmdesigner/controls/ComboboxEx.rb +97 -0
- data/lib/wrb/applications/frmdesigner/controls/Comboboxex.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.rb +11 -0
- data/lib/wrb/applications/frmdesigner/controls/Edit.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Edit.rb +8 -0
- data/lib/wrb/applications/frmdesigner/controls/Groupbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Groupbox.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Imagelist.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Imagelist.rb +115 -0
- data/lib/wrb/applications/frmdesigner/controls/Listbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Listbox.rb +77 -0
- data/lib/wrb/applications/frmdesigner/controls/Listview.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Listview.rb +157 -0
- data/lib/wrb/applications/frmdesigner/controls/Menu.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Menu.rb +198 -0
- data/lib/wrb/applications/frmdesigner/controls/Menubar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Menubar.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/MonthCalender.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Monthcalender.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Panel.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Panel.rb +30 -0
- data/lib/wrb/applications/frmdesigner/controls/Progressbar.rb +10 -0
- data/lib/wrb/applications/frmdesigner/controls/Radiobutton.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Radiobutton.rb +13 -0
- data/lib/wrb/applications/frmdesigner/controls/Rebar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Rebar.rb +162 -0
- data/lib/wrb/applications/frmdesigner/controls/Splitter.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Splitter.rb +66 -0
- data/lib/wrb/applications/frmdesigner/controls/Static.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Static.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Statusbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Statusbar.rb +103 -0
- data/lib/wrb/applications/frmdesigner/controls/Tabctrl.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Tabctrl.rb +136 -0
- data/lib/wrb/applications/frmdesigner/controls/Timer.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Timer.rb +36 -0
- data/lib/wrb/applications/frmdesigner/controls/Toolbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Toolbar.rb +165 -0
- data/lib/wrb/applications/frmdesigner/controls/Trackbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Trackbar.rb +34 -0
- data/lib/wrb/applications/frmdesigner/controls/Treeview.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Treeview.rb +107 -0
- data/lib/wrb/applications/frmdesigner/controls/Updown.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Updown.rb +31 -0
- data/lib/wrb/applications/frmdesigner/controls/default.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/progressbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/unselect.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/fddialogs.rb +87 -0
- data/lib/wrb/applications/frmdesigner/fdesign.rb +1315 -0
- data/lib/wrb/applications/frmdesigner/fdmodules.rb +1394 -0
- data/lib/wrb/applications/frmdesigner/fdparseform.rb +197 -0
- data/lib/wrb/applications/frmdesigner/img13.bmp +0 -0
- data/lib/wrb/base.rb +1294 -0
- data/lib/wrb/combocommon.rb +77 -0
- data/lib/wrb/commctrlconst.rb +139 -0
- data/lib/wrb/commdlg.rb +77 -0
- data/lib/wrb/components/animate.rb +114 -0
- data/lib/wrb/components/bitmap.rb +116 -0
- data/lib/wrb/components/button.rb +134 -0
- data/lib/wrb/components/canvas.rb +266 -0
- data/lib/wrb/components/checkbox.rb +118 -0
- data/lib/wrb/components/choosecolordlg.rb +87 -0
- data/lib/wrb/components/choosefontdlg.rb +142 -0
- data/lib/wrb/components/clipboard.rb +174 -0
- data/lib/wrb/components/combobox.rb +282 -0
- data/lib/wrb/components/comboboxex.rb +574 -0
- data/lib/wrb/components/cursor.rb +91 -0
- data/lib/wrb/components/datetimepicker.rb +197 -0
- data/lib/wrb/components/ddeclient.rb +180 -0
- data/lib/wrb/components/ddeserver.rb +131 -0
- data/lib/wrb/components/dialog.rb +228 -0
- data/lib/wrb/components/edit.rb +412 -0
- data/lib/wrb/components/font.rb +35 -0
- data/lib/wrb/components/form.rb +65 -0
- data/lib/wrb/components/groupbox.rb +122 -0
- data/lib/wrb/components/header.rb +479 -0
- data/lib/wrb/components/hotkeyctrl.rb +72 -0
- data/lib/wrb/components/icon.rb +109 -0
- data/lib/wrb/components/imagelist.rb +396 -0
- data/lib/wrb/components/inifile.rb +97 -0
- data/lib/wrb/components/listbox.rb +149 -0
- data/lib/wrb/components/listview.rb +1467 -0
- data/lib/wrb/components/menu.rb +592 -0
- data/lib/wrb/components/menubar.rb +84 -0
- data/lib/wrb/components/monthcalender.rb +164 -0
- data/lib/wrb/components/openfilenamedlg.rb +147 -0
- data/lib/wrb/components/pager.rb +199 -0
- data/lib/wrb/components/panel.rb +103 -0
- data/lib/wrb/components/picture.rb +55 -0
- data/lib/wrb/components/printdlg.rb +148 -0
- data/lib/wrb/components/printdlgex.rb +117 -0
- data/lib/wrb/components/printer.rb +97 -0
- data/lib/wrb/components/progressbar.rb +140 -0
- data/lib/wrb/components/radiobutton.rb +49 -0
- data/lib/wrb/components/rebar.rb +830 -0
- data/lib/wrb/components/registry.rb +408 -0
- data/lib/wrb/components/richedit.rb +1181 -0
- data/lib/wrb/components/savefilenamedlg.rb +27 -0
- data/lib/wrb/components/scintilla.rb +1298 -0
- data/lib/wrb/components/scrollbar.rb +239 -0
- data/lib/wrb/components/splitter.rb +494 -0
- data/lib/wrb/components/static.rb +198 -0
- data/lib/wrb/components/statusbar.rb +490 -0
- data/lib/wrb/components/tabctrl.rb +686 -0
- data/lib/wrb/components/timer.rb +117 -0
- data/lib/wrb/components/toolbar.rb +1107 -0
- data/lib/wrb/components/tooltip.rb +651 -0
- data/lib/wrb/components/trackbar.rb +298 -0
- data/lib/wrb/components/treeview.rb +845 -0
- data/lib/wrb/components/updown.rb +198 -0
- data/lib/wrb/ddeml.rb +241 -0
- data/lib/wrb/documents/animate.html +46 -0
- data/lib/wrb/documents/bitmap.html +69 -0
- data/lib/wrb/documents/button.html +78 -0
- data/lib/wrb/documents/canvas.html +137 -0
- data/lib/wrb/documents/checkbox.html +77 -0
- data/lib/wrb/documents/choosecolordlg.html +29 -0
- data/lib/wrb/documents/choosefontdlg.html +31 -0
- data/lib/wrb/documents/clipboard.html +31 -0
- data/lib/wrb/documents/combobox.html +117 -0
- data/lib/wrb/documents/comboboxex.html +139 -0
- data/lib/wrb/documents/control.html +53 -0
- data/lib/wrb/documents/cursor.html +45 -0
- data/lib/wrb/documents/datetimepicker.html +70 -0
- data/lib/wrb/documents/ddeclient.html +33 -0
- data/lib/wrb/documents/ddeserver.html +26 -0
- data/lib/wrb/documents/dialog.html +78 -0
- data/lib/wrb/documents/edit.html +169 -0
- data/lib/wrb/documents/empty.html +11 -0
- data/lib/wrb/documents/favicon.png +0 -0
- data/lib/wrb/documents/font.html +38 -0
- data/lib/wrb/documents/form.html +63 -0
- data/lib/wrb/documents/groupbox.html +57 -0
- data/lib/wrb/documents/header.html +85 -0
- data/lib/wrb/documents/hotkeyctrl.html +42 -0
- data/lib/wrb/documents/icon.html +45 -0
- data/lib/wrb/documents/imagelist.html +101 -0
- data/lib/wrb/documents/images/button.png +0 -0
- data/lib/wrb/documents/images/checkbox.png +0 -0
- data/lib/wrb/documents/images/combobox.png +0 -0
- data/lib/wrb/documents/images/comboboxex.png +0 -0
- data/lib/wrb/documents/images/datetimepicker.png +0 -0
- data/lib/wrb/documents/images/edit.png +0 -0
- data/lib/wrb/documents/images/groupbox.png +0 -0
- data/lib/wrb/documents/images/hotkeyctrl.png +0 -0
- data/lib/wrb/documents/images/listbox.png +0 -0
- data/lib/wrb/documents/images/listview.png +0 -0
- data/lib/wrb/documents/images/menu.png +0 -0
- data/lib/wrb/documents/images/menubar.png +0 -0
- data/lib/wrb/documents/images/monthcalender.png +0 -0
- data/lib/wrb/documents/images/progressbar.png +0 -0
- data/lib/wrb/documents/images/radiobutton.png +0 -0
- data/lib/wrb/documents/images/rebar.png +0 -0
- data/lib/wrb/documents/images/richedit.png +0 -0
- data/lib/wrb/documents/images/splitter.png +0 -0
- data/lib/wrb/documents/images/static.png +0 -0
- data/lib/wrb/documents/images/statusbar.png +0 -0
- data/lib/wrb/documents/images/tabctrl.png +0 -0
- data/lib/wrb/documents/images/toolbar.png +0 -0
- data/lib/wrb/documents/images/tooltip.png +0 -0
- data/lib/wrb/documents/images/trackbar.png +0 -0
- data/lib/wrb/documents/images/treeview.png +0 -0
- data/lib/wrb/documents/images/updown.png +0 -0
- data/lib/wrb/documents/index.html +155 -0
- data/lib/wrb/documents/inifile.html +36 -0
- data/lib/wrb/documents/license.txt +22 -0
- data/lib/wrb/documents/listbox.html +96 -0
- data/lib/wrb/documents/listview.html +277 -0
- data/lib/wrb/documents/make_doc.rb +596 -0
- data/lib/wrb/documents/menu.html +144 -0
- data/lib/wrb/documents/menubar.html +54 -0
- data/lib/wrb/documents/monthcalender.html +48 -0
- data/lib/wrb/documents/openfilenamedlg.html +36 -0
- data/lib/wrb/documents/pager.html +63 -0
- data/lib/wrb/documents/panel.html +32 -0
- data/lib/wrb/documents/picture.html +48 -0
- data/lib/wrb/documents/printdlg.html +35 -0
- data/lib/wrb/documents/printdlgex.html +35 -0
- data/lib/wrb/documents/printer.html +40 -0
- data/lib/wrb/documents/progressbar.html +69 -0
- data/lib/wrb/documents/radiobutton.html +51 -0
- data/lib/wrb/documents/rebar.html +143 -0
- data/lib/wrb/documents/registry.html +36 -0
- data/lib/wrb/documents/richedit.html +232 -0
- data/lib/wrb/documents/samples/editimg.bmp +0 -0
- data/lib/wrb/documents/samples/editimg.iml +0 -0
- data/lib/wrb/documents/samples/fileimg.bmp +0 -0
- data/lib/wrb/documents/samples/fileimg.iml +0 -0
- data/lib/wrb/documents/samples/sample_button.rb +21 -0
- data/lib/wrb/documents/samples/sample_checkbox.rb +18 -0
- data/lib/wrb/documents/samples/sample_combobox.rb +18 -0
- data/lib/wrb/documents/samples/sample_comboboxex.rb +23 -0
- data/lib/wrb/documents/samples/sample_datetimepicker.rb +11 -0
- data/lib/wrb/documents/samples/sample_edit.rb +25 -0
- data/lib/wrb/documents/samples/sample_groupbox.rb +19 -0
- data/lib/wrb/documents/samples/sample_hotkeyctrl.rb +12 -0
- data/lib/wrb/documents/samples/sample_listbox.rb +12 -0
- data/lib/wrb/documents/samples/sample_listview.rb +32 -0
- data/lib/wrb/documents/samples/sample_menu.rb +21 -0
- data/lib/wrb/documents/samples/sample_menubar.rb +23 -0
- data/lib/wrb/documents/samples/sample_monthcalender.rb +11 -0
- data/lib/wrb/documents/samples/sample_progressbar.rb +14 -0
- data/lib/wrb/documents/samples/sample_radiobutton.rb +14 -0
- data/lib/wrb/documents/samples/sample_rebar.rb +25 -0
- data/lib/wrb/documents/samples/sample_richedit.rb +60 -0
- data/lib/wrb/documents/samples/sample_splitter.rb +33 -0
- data/lib/wrb/documents/samples/sample_static.rb +15 -0
- data/lib/wrb/documents/samples/sample_statusbar.rb +17 -0
- data/lib/wrb/documents/samples/sample_tabctrl.rb +19 -0
- data/lib/wrb/documents/samples/sample_toolbar.rb +29 -0
- data/lib/wrb/documents/samples/sample_tooltip.rb +50 -0
- data/lib/wrb/documents/samples/sample_trackbar.rb +30 -0
- data/lib/wrb/documents/samples/sample_treeview.rb +19 -0
- data/lib/wrb/documents/samples/sample_updown.rb +18 -0
- data/lib/wrb/documents/samples/sampleimg16.iml +0 -0
- data/lib/wrb/documents/samples/sampleimg32.iml +0 -0
- data/lib/wrb/documents/samples/samplemg16.png +0 -0
- data/lib/wrb/documents/samples/samplemg32.png +0 -0
- data/lib/wrb/documents/samples/wrb.ico +0 -0
- data/lib/wrb/documents/savefilenamedlg.html +19 -0
- data/lib/wrb/documents/scrollbar.html +60 -0
- data/lib/wrb/documents/splitter.html +96 -0
- data/lib/wrb/documents/static.html +84 -0
- data/lib/wrb/documents/statusbar.html +110 -0
- data/lib/wrb/documents/tabctrl.html +151 -0
- data/lib/wrb/documents/timer.html +43 -0
- data/lib/wrb/documents/toolbar.html +181 -0
- data/lib/wrb/documents/tooltip.html +131 -0
- data/lib/wrb/documents/trackbar.html +107 -0
- data/lib/wrb/documents/treeview.html +210 -0
- data/lib/wrb/documents/updown.html +85 -0
- data/lib/wrb/documents/wincontrol.html +258 -0
- data/lib/wrb/documents/window.html +499 -0
- data/lib/wrb/documents/wrb.css +228 -0
- data/lib/wrb/gmem.rb +26 -0
- data/lib/wrb/imecommon.rb +59 -0
- data/lib/wrb/listcommon.rb +185 -0
- data/lib/wrb/lzss.rb +126 -0
- data/lib/wrb/scrollinfo.rb +142 -0
- data/lib/wrb/toplevelcommon.rb +634 -0
- metadata +315 -0
data/lib/wrb/lzss.rb
ADDED
@@ -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
|