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.
- 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/ext/rwin/rwin.c
ADDED
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
/*
|
|
2
|
+
# Project WRB was forked from Project VisualuRuby(temp-name).
|
|
3
|
+
# Author of this project: BANJO Koyu <banjokoyu at gmail.com>
|
|
4
|
+
# The URL of this project: https://bitbucket.org/wrb/
|
|
5
|
+
#
|
|
6
|
+
# This is a ext-library part of WRB.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#include "rwin.h"
|
|
10
|
+
#include "shlwapi.h"
|
|
11
|
+
|
|
12
|
+
VALUE IS_GUIAPP;
|
|
13
|
+
VALUE COMCTL_MAJOR_VERSION;
|
|
14
|
+
VALUE COMCTL_MINOR_VERSION;
|
|
15
|
+
|
|
16
|
+
HINSTANCE hInstance;
|
|
17
|
+
ATOM RwClassAtom;
|
|
18
|
+
|
|
19
|
+
AAtree *winlist;
|
|
20
|
+
AAtree *childwinlist;
|
|
21
|
+
AAtree *rsclist;
|
|
22
|
+
|
|
23
|
+
VALUE internal_encoding, external_encoding, wchar_encoding;
|
|
24
|
+
rb_encoding *rw_internal_enc, *rw_external_enc, *rw_wchar_enc;
|
|
25
|
+
|
|
26
|
+
/* modules and classes */
|
|
27
|
+
VALUE mRwin;
|
|
28
|
+
VALUE mRwApp;
|
|
29
|
+
VALUE cRwCancelDefWndProc;
|
|
30
|
+
|
|
31
|
+
/* ruby's global variables */
|
|
32
|
+
VALUE resources;
|
|
33
|
+
|
|
34
|
+
/* Errors */
|
|
35
|
+
VALUE rw_eResourceNotAliveError;
|
|
36
|
+
VALUE rw_eWindowNotAliveError;
|
|
37
|
+
|
|
38
|
+
/* Window's global variables */
|
|
39
|
+
HWND current_hwnd;
|
|
40
|
+
HACCEL current_haccel;
|
|
41
|
+
RwWindow *activewin;
|
|
42
|
+
|
|
43
|
+
/* Encoding */
|
|
44
|
+
TCHAR* /* front end from Ruby */
|
|
45
|
+
rw_str2tchar(VALUE str){ /* pointer only*/
|
|
46
|
+
volatile VALUE t = rb_str_encode(str, internal_encoding, 0, Qnil); /* GC_GUARD */
|
|
47
|
+
return (TCHAR*)RSTRING_PTR(t);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
TCHAR* /* pointer and bytesize */
|
|
51
|
+
rw_str2tchar2(VALUE str, size_t *bytesize){
|
|
52
|
+
volatile VALUE t = rb_str_encode(str, internal_encoding, 0, Qnil); /* GC_GUARD */
|
|
53
|
+
*bytesize = RSTRING_LEN(t);
|
|
54
|
+
return (TCHAR*)RSTRING_PTR(t);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
WCHAR*
|
|
58
|
+
rw_str2wchar(VALUE str){
|
|
59
|
+
volatile VALUE w = rb_str_encode(str, wchar_encoding, 0, Qnil); /* GC_GUARD */
|
|
60
|
+
return (WCHAR*)RSTRING_PTR(w);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
VALUE /* Back end to Ruby */
|
|
64
|
+
rw_encode_external(TCHAR *buff){
|
|
65
|
+
#if UNICODE
|
|
66
|
+
VALUE str = rb_enc_str_new((char*)buff, wcslen(buff)*sizeof(WCHAR), rw_internal_enc);
|
|
67
|
+
#else
|
|
68
|
+
VALUE str = rb_enc_str_new((char*)buff, strlen(buff)*sizeof(CHAR), rw_internal_enc);
|
|
69
|
+
#endif
|
|
70
|
+
return rb_str_encode(str, external_encoding, 0, Qnil);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
VALUE /* Back end to Ruby */
|
|
74
|
+
rw_encode_external2(WCHAR *buff, int len){
|
|
75
|
+
VALUE str = rb_enc_str_new((char*)buff, len, rw_internal_enc);
|
|
76
|
+
return rb_str_encode(str, external_encoding, 0, Qnil);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* for converting cygwin path*/
|
|
80
|
+
void
|
|
81
|
+
rwconv2absolute_path(char* dst, char* src){
|
|
82
|
+
#ifdef __CYGWIN__
|
|
83
|
+
cygwin_conv_path(CCP_POSIX_TO_WIN_A|CCP_ABSOLUTE, src, dst, RW_MAXPATH);
|
|
84
|
+
#else
|
|
85
|
+
_fullpath(dst, src, RW_MAXPATH);
|
|
86
|
+
#endif
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
void
|
|
90
|
+
rwconv2absolute_pathW(wchar_t* dst, wchar_t* src){
|
|
91
|
+
#ifdef __CYGWIN__
|
|
92
|
+
cygwin_conv_path(CCP_POSIX_TO_WIN_W|CCP_ABSOLUTE, src, dst, RW_MAXPATH);
|
|
93
|
+
#else
|
|
94
|
+
_wfullpath(dst, src, RW_MAXPATH);
|
|
95
|
+
#endif
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
static VALUE
|
|
99
|
+
rwapp_hinstance(){
|
|
100
|
+
return INT2NUM((INT_PTR)hInstance);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* Message loops */
|
|
104
|
+
static VALUE
|
|
105
|
+
rwapp_msgloop(){
|
|
106
|
+
MSG msg;
|
|
107
|
+
#if RWIN_USEMULTITHREAD
|
|
108
|
+
while(TRUE){
|
|
109
|
+
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
|
|
110
|
+
if (msg.message == WM_QUIT) break;
|
|
111
|
+
if (!(activewin && TranslateAccelerator(activewin->hwnd, activewin->haccel, &msg))){
|
|
112
|
+
TranslateMessage(&msg);
|
|
113
|
+
DispatchMessage(&msg);
|
|
114
|
+
}
|
|
115
|
+
} else { /* for Ruby's Thread */
|
|
116
|
+
if(!GetQueueStatus(QS_ALLEVENTS)){
|
|
117
|
+
rb_thread_call_without_gvl((void*(*)(void*))WaitMessage, 0, RUBY_UBF_IO, 0);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
#else
|
|
122
|
+
while(GetMessage(&msg, NULL, 0, 0)){
|
|
123
|
+
if (!(activewin && TranslateAccelerator(activewin->hwnd, activewin->haccel, &msg))){
|
|
124
|
+
TranslateMessage(&msg);
|
|
125
|
+
DispatchMessage(&msg);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
#endif
|
|
129
|
+
rb_exit(msg.wParam);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
static VALUE
|
|
133
|
+
rwapp_dlgmsgloop(){
|
|
134
|
+
MSG msg;
|
|
135
|
+
#if RWIN_USEMULTITHREAD
|
|
136
|
+
while(TRUE){
|
|
137
|
+
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
|
|
138
|
+
if (msg.message == WM_QUIT) break;
|
|
139
|
+
if (!((activewin && TranslateAccelerator(activewin->hwnd,activewin->haccel,&msg)) ||
|
|
140
|
+
activewin && IsDialogMessage(activewin->hwnd, &msg))){
|
|
141
|
+
TranslateMessage(&msg);
|
|
142
|
+
DispatchMessage(&msg);
|
|
143
|
+
}
|
|
144
|
+
} else { /* for Ruby Thread */
|
|
145
|
+
if(!GetQueueStatus(QS_ALLEVENTS)){
|
|
146
|
+
rb_thread_call_without_gvl((void*(*)(void*))WaitMessage, 0, RUBY_UBF_IO, 0);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
#else
|
|
151
|
+
while(GetMessage(&msg, NULL, 0, 0)){
|
|
152
|
+
if (!((activewin && TranslateAccelerator(activewin->hwnd,activewin->haccel,&msg)) ||
|
|
153
|
+
activewin && IsDialogMessage(activewin->hwnd, &msg))){
|
|
154
|
+
TranslateMessage(&msg);
|
|
155
|
+
DispatchMessage(&msg);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
#endif
|
|
159
|
+
rb_exit(msg.wParam);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* Prototyping */
|
|
163
|
+
INT_PTR CALLBACK RwDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
164
|
+
|
|
165
|
+
static VALUE
|
|
166
|
+
rwapp_automsgloop(){
|
|
167
|
+
MSG msg;
|
|
168
|
+
#if RWIN_USEMULTITHREAD
|
|
169
|
+
while(TRUE){
|
|
170
|
+
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
|
|
171
|
+
if (msg.message==WM_QUIT) break;
|
|
172
|
+
if (!((activewin && TranslateAccelerator(activewin->hwnd,activewin->haccel,&msg)) ||
|
|
173
|
+
activewin && (INT_PTR)RwDlgProc==GetWindowLongPtr(activewin->hwnd,DWLP_DLGPROC) &&
|
|
174
|
+
IsDialogMessage(activewin->hwnd, &msg))){
|
|
175
|
+
TranslateMessage(&msg);
|
|
176
|
+
DispatchMessage(&msg);
|
|
177
|
+
}
|
|
178
|
+
} else { /* for Ruby Thread */
|
|
179
|
+
if(!GetQueueStatus(QS_ALLEVENTS)){
|
|
180
|
+
rb_thread_call_without_gvl((void*(*)(void*))WaitMessage, 0, RUBY_UBF_IO, 0);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
#else
|
|
185
|
+
while(GetMessage(&msg, NULL, 0, 0)){
|
|
186
|
+
if (!((activewin && TranslateAccelerator(activewin->hwnd,activewin->haccel,&msg)) ||
|
|
187
|
+
activewin && (INT_PTR)RwDlgProc==GetWindowLongPtr(activewin->hwnd,DWLP_DLGPROC) &&
|
|
188
|
+
IsDialogMessage(activewin->hwnd, &msg))){
|
|
189
|
+
TranslateMessage(&msg);
|
|
190
|
+
DispatchMessage(&msg);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
#endif
|
|
194
|
+
// destroy_all_win(0);
|
|
195
|
+
rb_exit(msg.wParam);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
BOOL
|
|
199
|
+
RegisterWndClass(const TCHAR* classname, HICON hIcon,UINT clstyle, HBRUSH hBackGnd, HCURSOR hCursor, WNDPROC wndproc)
|
|
200
|
+
{
|
|
201
|
+
WNDCLASSEX wc;
|
|
202
|
+
wc.cbSize = sizeof(WNDCLASSEX);
|
|
203
|
+
wc.style = clstyle;
|
|
204
|
+
wc.lpfnWndProc = wndproc;
|
|
205
|
+
wc.cbClsExtra = 0;
|
|
206
|
+
wc.cbWndExtra = DWLP_USER;
|
|
207
|
+
wc.hInstance = hInstance;
|
|
208
|
+
wc.hIcon = hIcon;
|
|
209
|
+
wc.hCursor = hCursor;
|
|
210
|
+
wc.hbrBackground = hBackGnd;
|
|
211
|
+
wc.lpszMenuName = NULL;
|
|
212
|
+
wc.lpszClassName = classname;
|
|
213
|
+
wc.hIconSm = 0;
|
|
214
|
+
return (RegisterClassEx(&wc));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
static void
|
|
219
|
+
aa_callback_mark_rw_window(const AAnode *node, void *arg){
|
|
220
|
+
VALUE wobj = (VALUE)node->val;
|
|
221
|
+
RwWindow *rw = DATA_PTR(wobj);
|
|
222
|
+
if(rw->hwnd) rb_gc_mark(wobj);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
static void
|
|
226
|
+
aa_callback_mark_rw_rsrc(const AAnode *node, void *arg){
|
|
227
|
+
VALUE robj = (VALUE)node->val;
|
|
228
|
+
RwResource *rr = DATA_PTR(robj);
|
|
229
|
+
// fprintf(stderr, "@%d: type=%d, handle=%p\n", __LINE__, rr->type, rr->handle);
|
|
230
|
+
if(rr->handle) rb_gc_mark(robj); /* Bitmap image will be held by Imagelist. */
|
|
231
|
+
// if(rr->type==RcMenu && rr->handle) rb_gc_mark(robj); /* Menu will be held by another one. */
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
static void
|
|
235
|
+
mark_rw_window(void *ptr){
|
|
236
|
+
if (ptr){
|
|
237
|
+
RwResources *rc = ptr;
|
|
238
|
+
aaForeach(rc->winlist, aa_callback_mark_rw_window, NULL);
|
|
239
|
+
aaForeach(rc->childwinlist, aa_callback_mark_rw_window, NULL);
|
|
240
|
+
aaForeach(rc->rsclist, aa_callback_mark_rw_rsrc, NULL);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
static void
|
|
245
|
+
aa_callback_destroy_win(const AAnode *node, void *arg){
|
|
246
|
+
HWND hwnd = (HWND)node->key;
|
|
247
|
+
if (!GetParent(hwnd)){
|
|
248
|
+
DestroyWindow(hwnd);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
void
|
|
253
|
+
destroy_all_win(int gui){
|
|
254
|
+
RwResources *rc;
|
|
255
|
+
Data_Get_Struct(resources, RwResources, rc);
|
|
256
|
+
aaForeach(rc->winlist, aa_callback_destroy_win, &gui);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
static VALUE
|
|
260
|
+
rwapp_quit_app(VALUE mod){
|
|
261
|
+
PostQuitMessage(0);
|
|
262
|
+
return Qnil;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
static VALUE
|
|
266
|
+
rwapp_getcursorpos(VALUE mod){
|
|
267
|
+
VALUE robj;
|
|
268
|
+
POINT pt;
|
|
269
|
+
GetCursorPos(&pt);
|
|
270
|
+
robj = rb_ary_new2(2);
|
|
271
|
+
rb_ary_store(robj, 0, INT2FIX(pt.x));
|
|
272
|
+
rb_ary_store(robj, 1, INT2FIX(pt.y));
|
|
273
|
+
return robj;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* Cancel DefWindowProc */
|
|
277
|
+
static size_t
|
|
278
|
+
rw_candefwndprc_m_size(const void *ptr){
|
|
279
|
+
return ptr ? sizeof(RwCancelDefWindowProc) : 0;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
const rb_data_type_t
|
|
283
|
+
rw_candefwndprc_d_type = {
|
|
284
|
+
"CancelDefWindowProc", {NULL, free, rw_candefwndprc_m_size,}, NULL, NULL
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
static VALUE
|
|
288
|
+
rw_msg_new_and_set_retval(int argc, VALUE *argv, VALUE klass){
|
|
289
|
+
RwCancelDefWindowProc *rcp;
|
|
290
|
+
VALUE obj = TypedData_Make_Struct(cRwCancelDefWndProc, RwCancelDefWindowProc, &rw_candefwndprc_d_type, rcp);
|
|
291
|
+
if (argc>0) {
|
|
292
|
+
rcp->retval = NIL_P(argv[0]) ? 1 : NUM2ULONG_PTR(argv[0]);
|
|
293
|
+
}
|
|
294
|
+
return obj;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
static VALUE
|
|
298
|
+
rwapp_get_externalenc(){
|
|
299
|
+
return external_encoding;
|
|
300
|
+
}
|
|
301
|
+
static VALUE
|
|
302
|
+
rwapp_set_externalenc(VALUE klass, VALUE enc){
|
|
303
|
+
external_encoding = enc;
|
|
304
|
+
rw_external_enc = rb_enc_from_index(rb_to_encoding_index(external_encoding));
|
|
305
|
+
return enc;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
static VALUE
|
|
309
|
+
is_unicodep(){
|
|
310
|
+
#ifdef UNICODE
|
|
311
|
+
return Qtrue;
|
|
312
|
+
#else
|
|
313
|
+
return Qfalse;
|
|
314
|
+
#endif
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
static void
|
|
318
|
+
set_rw_gui_app_p(){
|
|
319
|
+
IMAGE_OPTIONAL_HEADER32 *opt_hdr;
|
|
320
|
+
IMAGE_DOS_HEADER *dos_hdr = (IMAGE_DOS_HEADER*)hInstance;
|
|
321
|
+
opt_hdr = (IMAGE_OPTIONAL_HEADER32*)((char*)hInstance + dos_hdr->e_lfanew + sizeof(DWORD) +
|
|
322
|
+
sizeof(IMAGE_FILE_HEADER));
|
|
323
|
+
IS_GUIAPP = (opt_hdr->Subsystem == IMAGE_SUBSYSTEM_WINDOWS_GUI) ? Qtrue : Qfalse;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
static void
|
|
327
|
+
set_rw_comctlversion(){
|
|
328
|
+
DLLVERSIONINFO dvi;
|
|
329
|
+
HANDLE hdll = LoadLibrary(TEXT("comctl32.dll"));
|
|
330
|
+
FARPROC pDllGetVersion = (FARPROC)GetProcAddress(hdll, "DllGetVersion");
|
|
331
|
+
ZeroMemory(&dvi, sizeof(dvi));
|
|
332
|
+
dvi.cbSize = sizeof(dvi);
|
|
333
|
+
if (pDllGetVersion && pDllGetVersion(&dvi)==S_OK) {
|
|
334
|
+
COMCTL_MAJOR_VERSION = INT2FIX(dvi.dwMajorVersion);
|
|
335
|
+
COMCTL_MINOR_VERSION = INT2FIX(dvi.dwMinorVersion);
|
|
336
|
+
} else {
|
|
337
|
+
COMCTL_MAJOR_VERSION = Qnil;
|
|
338
|
+
COMCTL_MINOR_VERSION = Qnil;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
static VALUE
|
|
343
|
+
rwapp_count_opened_window(){
|
|
344
|
+
return INT2FIX(aaCount(winlist));
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
static VALUE
|
|
348
|
+
rwapp_hwnd2ref(VALUE klass, VALUE v_handle){
|
|
349
|
+
VALUE wobj;
|
|
350
|
+
int hsearch = NUM2ULONG_PTR(v_handle);
|
|
351
|
+
if(wobj=Get_childwin(hsearch)) return wobj;
|
|
352
|
+
if(wobj=Get_win(hsearch)) return wobj;
|
|
353
|
+
return Qnil;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
static VALUE
|
|
357
|
+
rwapp_hrsc2ref(VALUE klass, VALUE v_handle){
|
|
358
|
+
VALUE wobj;
|
|
359
|
+
if(wobj=Get_rsc(NUM2ULONG_PTR(v_handle))) return wobj;
|
|
360
|
+
return Qnil;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/* Initializing */
|
|
364
|
+
void
|
|
365
|
+
Init_rwin(){
|
|
366
|
+
RwResources *rc;
|
|
367
|
+
|
|
368
|
+
hInstance = GetModuleHandle(NULL);
|
|
369
|
+
set_rw_gui_app_p();
|
|
370
|
+
set_rw_comctlversion();
|
|
371
|
+
|
|
372
|
+
resources = Data_Make_Struct(rb_cObject, RwResources, mark_rw_window, -1, rc);
|
|
373
|
+
rb_global_variable(&resources);
|
|
374
|
+
|
|
375
|
+
activewin = NULL;
|
|
376
|
+
|
|
377
|
+
winlist = newAAtree(NULL);/* destructor is't needed, 'cause Ruby destructs all at shudown */
|
|
378
|
+
childwinlist = newAAtree(NULL); /* ditto */
|
|
379
|
+
rsclist = newAAtree(NULL); /* ditto */
|
|
380
|
+
rc->winlist = winlist;
|
|
381
|
+
rc->childwinlist = childwinlist;
|
|
382
|
+
rc->rsclist = rsclist;
|
|
383
|
+
|
|
384
|
+
external_encoding = rb_enc_from_encoding(rb_default_external_encoding());
|
|
385
|
+
wchar_encoding = rb_enc_from_encoding(rb_enc_find("UTF-16LE"));
|
|
386
|
+
#ifdef UNICODE
|
|
387
|
+
internal_encoding = wchar_encoding;
|
|
388
|
+
#else
|
|
389
|
+
internal_encoding = external_encoding;
|
|
390
|
+
#endif
|
|
391
|
+
rw_internal_enc = rb_enc_from_index(rb_to_encoding_index(internal_encoding));
|
|
392
|
+
rw_external_enc = rb_enc_from_index(rb_to_encoding_index(external_encoding));
|
|
393
|
+
rw_wchar_enc = rb_enc_from_index(rb_to_encoding_index(wchar_encoding));
|
|
394
|
+
|
|
395
|
+
mRwin = rb_define_module("RWin");
|
|
396
|
+
mRwApp = rb_define_module_under(mRwin, "Application");
|
|
397
|
+
|
|
398
|
+
rb_define_const(mRwin, "RW_VERSION", rb_str_new2(RW_VERSION));
|
|
399
|
+
#if UNICODE
|
|
400
|
+
rb_define_const(mRwin, "UNICODE", Qtrue);
|
|
401
|
+
#else
|
|
402
|
+
rb_define_const(mRwin, "UNICODE", Qfalse);
|
|
403
|
+
#endif
|
|
404
|
+
|
|
405
|
+
#ifdef _WIN64
|
|
406
|
+
rb_define_const(mRwin, "X64", Qtrue);
|
|
407
|
+
#else
|
|
408
|
+
rb_define_const(mRwin, "X64", Qfalse);
|
|
409
|
+
#endif
|
|
410
|
+
|
|
411
|
+
rb_define_const(mRwApp, "IS_GUIAPP", IS_GUIAPP);
|
|
412
|
+
rb_define_const(mRwApp, "COMCTL_MAJOR_VERSION", COMCTL_MAJOR_VERSION);
|
|
413
|
+
rb_define_const(mRwApp, "COMCTL_MINOR_VERSION", COMCTL_MINOR_VERSION);
|
|
414
|
+
|
|
415
|
+
rw_eResourceNotAliveError = rb_define_class_under(mRwin, "ResourceNotAliveError",
|
|
416
|
+
rb_eRuntimeError);
|
|
417
|
+
rw_eWindowNotAliveError = rb_define_class_under(mRwin, "WindowNotAliveError",
|
|
418
|
+
rb_eRuntimeError);
|
|
419
|
+
|
|
420
|
+
rb_define_singleton_method(mRwApp,"hInstance", rwapp_hinstance, 0);
|
|
421
|
+
rb_define_singleton_method(mRwApp,"msgloop", rwapp_msgloop, 0);
|
|
422
|
+
rb_define_singleton_method(mRwApp,"dlgmsgloop", rwapp_dlgmsgloop, 0);
|
|
423
|
+
rb_define_singleton_method(mRwApp,"automsgloop", rwapp_automsgloop, 0);
|
|
424
|
+
rb_define_singleton_method(mRwApp,"quit!", rwapp_quit_app, 0);
|
|
425
|
+
rb_define_singleton_method(mRwApp, "GetCursorPos", rwapp_getcursorpos, 0);
|
|
426
|
+
|
|
427
|
+
rb_define_singleton_method(mRwApp,"count_opened_window", rwapp_count_opened_window, 0);
|
|
428
|
+
rb_define_singleton_method(mRwApp,"hwnd2ref", rwapp_hwnd2ref, 1);
|
|
429
|
+
rb_define_singleton_method(mRwApp,"hrsc2ref", rwapp_hrsc2ref, 1);
|
|
430
|
+
|
|
431
|
+
cRwCancelDefWndProc = rb_define_class_under(mRwApp, "CancelDefWindowProc", rb_cObject);
|
|
432
|
+
rb_define_singleton_method(mRwApp, "CancelDefWindowProc", rw_msg_new_and_set_retval, -1);
|
|
433
|
+
|
|
434
|
+
RwClassAtom = RegisterWndClass(RW_CLASS_NAME, LoadIcon(NULL,IDI_APPLICATION),
|
|
435
|
+
CS_GLOBALCLASS | CS_HREDRAW | CS_VREDRAW ,
|
|
436
|
+
(HBRUSH)(1+COLOR_3DFACE), LoadCursor(NULL, IDC_ARROW),
|
|
437
|
+
RwWndProc);
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
/* Encoding */
|
|
441
|
+
rb_define_singleton_method(mRwApp, "external_encoding", rwapp_get_externalenc, 0);
|
|
442
|
+
rb_define_singleton_method(mRwApp, "external_encoding=", rwapp_set_externalenc, 1);
|
|
443
|
+
rb_define_singleton_method(mRwApp, "is_unicode?", is_unicodep, 0);
|
|
444
|
+
|
|
445
|
+
/* Initialize modules */
|
|
446
|
+
Init_rw_api();
|
|
447
|
+
Init_rw_windows();
|
|
448
|
+
Init_rw_resources();
|
|
449
|
+
Init_rw_graphics();
|
|
450
|
+
Init_rw_devices();
|
|
451
|
+
}
|
data/ext/rwin/rwin.h
ADDED
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
/*
|
|
2
|
+
# Project WRB was forked from Project VisualuRuby(temp-name).
|
|
3
|
+
# Author of this project: BANJO Koyu <banjokoyu at gmail.com>
|
|
4
|
+
# The URL of this project: https://bitbucket.org/wrb/
|
|
5
|
+
#
|
|
6
|
+
# This is a ext-library part of WRB.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef __RWIN_H__
|
|
10
|
+
#define __RWIN_H__
|
|
11
|
+
|
|
12
|
+
#include <ctype.h>
|
|
13
|
+
#include <wchar.h>
|
|
14
|
+
#include "ruby.h"
|
|
15
|
+
#include <windows.h>
|
|
16
|
+
#include <commctrl.h>
|
|
17
|
+
|
|
18
|
+
#include "rw_gdiplus.h"
|
|
19
|
+
|
|
20
|
+
#ifdef __CYGWIN__
|
|
21
|
+
# include <sys/cygwin.h>
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
#include "ruby/thread.h"
|
|
25
|
+
#include "ruby/encoding.h"
|
|
26
|
+
|
|
27
|
+
#include "aatree.h"
|
|
28
|
+
|
|
29
|
+
#ifndef WINVER
|
|
30
|
+
# define WINVER 0x0580 /* Only for Windows XP and later, will not work on Windows 2000 or 9X */
|
|
31
|
+
#endif
|
|
32
|
+
|
|
33
|
+
#define RW_VERSION "2.0.0"
|
|
34
|
+
#define RW_MAXPATH 256
|
|
35
|
+
#define RW_CLASS_NAME TEXT("RUBYWIN")
|
|
36
|
+
|
|
37
|
+
#ifdef _WIN64
|
|
38
|
+
# define NUM2HANDLE NUM2ULL
|
|
39
|
+
# define NUM2ULONG_PTR NUM2ULL
|
|
40
|
+
# define NUM2LONG_PTR NUM2LL
|
|
41
|
+
# define LONG_PTR2NUM LL2NUM
|
|
42
|
+
# define ULONG_PTR2NUM ULL2NUM
|
|
43
|
+
#else
|
|
44
|
+
# define NUM2HANDLE NUM2ULONG
|
|
45
|
+
# define NUM2ULONG_PTR NUM2ULONG
|
|
46
|
+
# define NUM2LONG_PTR NUM2LONG
|
|
47
|
+
# define LONG_PTR2NUM LONG2NUM
|
|
48
|
+
# define ULONG_PTR2NUM ULONG2NUM
|
|
49
|
+
#endif
|
|
50
|
+
|
|
51
|
+
#define RW_MALLOC(ptr, size) do{ \
|
|
52
|
+
ptr = malloc(size); \
|
|
53
|
+
if(!ptr) rb_raise(rb_eRuntimeError, "failed to allocate memory"); \
|
|
54
|
+
} while(0)
|
|
55
|
+
|
|
56
|
+
#define RW_CALLOC(ptr, size) do{ \
|
|
57
|
+
ptr = calloc(size, sizeof(char)); \
|
|
58
|
+
if(!ptr) rb_raise(rb_eRuntimeError, "failed to allocate memory"); \
|
|
59
|
+
} while(0)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
/* Global variables */
|
|
63
|
+
extern ATOM RwClassAtom;
|
|
64
|
+
extern HINSTANCE hInstance;
|
|
65
|
+
|
|
66
|
+
extern AAtree *winlist;
|
|
67
|
+
extern AAtree *childwinlist;
|
|
68
|
+
extern AAtree *rsclist;
|
|
69
|
+
|
|
70
|
+
/* Ruby's constants */
|
|
71
|
+
extern VALUE IS_GUIAPP;
|
|
72
|
+
extern VALUE COMCTL_MAJOR_VERSION;
|
|
73
|
+
extern VALUE COMCTL_MINOR_VERSION;
|
|
74
|
+
|
|
75
|
+
/* classes and modules */
|
|
76
|
+
extern VALUE mRwin;
|
|
77
|
+
extern VALUE mRwApp;
|
|
78
|
+
extern VALUE cRwWindow;
|
|
79
|
+
extern VALUE cRwCancelDefWndProc;
|
|
80
|
+
extern VALUE cRwBitmap;
|
|
81
|
+
extern VALUE cRwIcon;
|
|
82
|
+
extern VALUE cRwImage;
|
|
83
|
+
|
|
84
|
+
extern VALUE cRwCanvas;
|
|
85
|
+
extern VALUE mRwAPI;
|
|
86
|
+
extern VALUE cRwAPIfunc;
|
|
87
|
+
extern VALUE cRwAPIstruct;
|
|
88
|
+
extern VALUE apifunc_class_libs;
|
|
89
|
+
|
|
90
|
+
/* CStruct constants */
|
|
91
|
+
extern int _id_apistr_class_stsize;
|
|
92
|
+
extern int _id_apistr_class_sttemplate;
|
|
93
|
+
extern int _id_apistr_class_stclasses;
|
|
94
|
+
extern int _id_apistr_class_stargcount;
|
|
95
|
+
|
|
96
|
+
/* pre-defined classes for CStruct */
|
|
97
|
+
extern VALUE ccsCHAR, ccsWCHAR, ccsTCHAR, ccsBYTE, ccsWORD, ccsDWORD, ccsPOINT, ccsSIZE, ccsRECT;
|
|
98
|
+
extern VALUE ccsLOGBRUSH, ccsLOGFONT, ccsLOGPEN, ccsIMAGEINFO, ccsBITMAPINFO, ccsMENUITEMINFO;
|
|
99
|
+
extern VALUE ccsDEVMODE;
|
|
100
|
+
|
|
101
|
+
/* Errors */
|
|
102
|
+
extern VALUE rw_eWindowNotAliveError;
|
|
103
|
+
extern VALUE rw_eResourceNotAliveError;
|
|
104
|
+
|
|
105
|
+
#define Register_win(hwnd, wobj) aaInsert(winlist, (ULONG_PTR)hwnd, (void*)wobj)
|
|
106
|
+
#define Unregister_win(hwnd) aaDelete(winlist, (ULONG_PTR)hwnd)
|
|
107
|
+
#define Get_win(hwnd) ((VALUE)aaGetval(winlist, (ULONG_PTR)hwnd))
|
|
108
|
+
|
|
109
|
+
#define Register_childwin(hwnd, wobj) aaInsert(childwinlist, (ULONG_PTR)hwnd, (void*)wobj)
|
|
110
|
+
#define Unregister_childwin(hwnd) aaDelete(childwinlist, (ULONG_PTR)hwnd)
|
|
111
|
+
#define Get_childwin(hwnd) ((VALUE)aaGetval(childwinlist, (ULONG_PTR)hwnd))
|
|
112
|
+
|
|
113
|
+
#define Register_rsc(handle, rcobj) aaInsert(rsclist, (ULONG_PTR)handle, (void*)rcobj)
|
|
114
|
+
#define Unregister_rsc(handle) aaDelete(rsclist, (ULONG_PTR)handle)
|
|
115
|
+
#define Get_rsc(handle) ((VALUE)aaGetval(rsclist, (ULONG_PTR)handle))
|
|
116
|
+
|
|
117
|
+
/* Structures */
|
|
118
|
+
|
|
119
|
+
typedef struct {
|
|
120
|
+
AAtree *winlist;
|
|
121
|
+
AAtree *childwinlist;
|
|
122
|
+
AAtree *rsclist;
|
|
123
|
+
} RwResources;
|
|
124
|
+
|
|
125
|
+
typedef struct {
|
|
126
|
+
HWND hwnd;
|
|
127
|
+
AAtree *msgfilter;
|
|
128
|
+
AAtree *handler_ids;
|
|
129
|
+
DWORD nthread_id;
|
|
130
|
+
HACCEL haccel;
|
|
131
|
+
} RwWindow;
|
|
132
|
+
|
|
133
|
+
typedef struct RwMsgHandler_ {
|
|
134
|
+
unsigned handler_id;
|
|
135
|
+
char *arg_template;
|
|
136
|
+
VALUE klass;
|
|
137
|
+
VALUE receiver;
|
|
138
|
+
struct RwMsgHandler_ *next;
|
|
139
|
+
} RwMsgHandler;
|
|
140
|
+
|
|
141
|
+
typedef struct {
|
|
142
|
+
RwMsgHandler *handler;
|
|
143
|
+
AAtree *senders;
|
|
144
|
+
} RwBaseHandler;
|
|
145
|
+
|
|
146
|
+
#define RwCheckWindow(win) \
|
|
147
|
+
if(!(win)->hwnd){rb_raise(rw_eWindowNotAliveError, "Window is not alive");}
|
|
148
|
+
|
|
149
|
+
/* resources */
|
|
150
|
+
|
|
151
|
+
typedef enum {
|
|
152
|
+
RcMenu = 0,
|
|
153
|
+
RcFont,
|
|
154
|
+
RcIcon,
|
|
155
|
+
RcCursor,
|
|
156
|
+
RcBitmap,
|
|
157
|
+
RcImagelist,
|
|
158
|
+
RcPen,
|
|
159
|
+
RcBrush
|
|
160
|
+
} RCTYPE;
|
|
161
|
+
|
|
162
|
+
typedef struct {
|
|
163
|
+
RCTYPE type;
|
|
164
|
+
HANDLE handle;
|
|
165
|
+
} RwResource;
|
|
166
|
+
|
|
167
|
+
typedef struct {
|
|
168
|
+
RCTYPE type;
|
|
169
|
+
HMENU hmenu;
|
|
170
|
+
HWND hwnd;
|
|
171
|
+
} RwMenu;
|
|
172
|
+
|
|
173
|
+
typedef struct {
|
|
174
|
+
RCTYPE type;
|
|
175
|
+
HFONT hfont;
|
|
176
|
+
int external;
|
|
177
|
+
} RwFont;
|
|
178
|
+
|
|
179
|
+
typedef struct {
|
|
180
|
+
RCTYPE type;
|
|
181
|
+
HICON hicon;
|
|
182
|
+
BOOL shared;
|
|
183
|
+
} RwIcon;
|
|
184
|
+
|
|
185
|
+
typedef struct {
|
|
186
|
+
RCTYPE type;
|
|
187
|
+
HCURSOR hcursor;
|
|
188
|
+
BOOL shared;
|
|
189
|
+
} RwCursor;
|
|
190
|
+
|
|
191
|
+
typedef struct {
|
|
192
|
+
RCTYPE type;
|
|
193
|
+
HBITMAP hbitmap;
|
|
194
|
+
HBITMAP hddbitmap; /* device dependent bitmap */
|
|
195
|
+
HDC hdc;
|
|
196
|
+
BOOL shared;
|
|
197
|
+
} RwBitmap;
|
|
198
|
+
|
|
199
|
+
typedef struct {
|
|
200
|
+
RCTYPE type;
|
|
201
|
+
HIMAGELIST himagelist;
|
|
202
|
+
} RwImagelist;
|
|
203
|
+
|
|
204
|
+
typedef struct{
|
|
205
|
+
RCTYPE type;
|
|
206
|
+
HPEN hpen;
|
|
207
|
+
} RwPen;
|
|
208
|
+
|
|
209
|
+
typedef struct{
|
|
210
|
+
RCTYPE type;
|
|
211
|
+
HBRUSH hbrush;
|
|
212
|
+
} RwBrush;
|
|
213
|
+
|
|
214
|
+
#define RwCheckResource(rc) \
|
|
215
|
+
if(!((RwResource*)rc)->handle){rb_raise(rw_eResourceNotAliveError, "Resource is not alive");}
|
|
216
|
+
|
|
217
|
+
/* device contexts */
|
|
218
|
+
typedef struct {
|
|
219
|
+
HDC hdc;
|
|
220
|
+
union {
|
|
221
|
+
HWND hwnd;
|
|
222
|
+
HBITMAP hbitmap;
|
|
223
|
+
};
|
|
224
|
+
union {
|
|
225
|
+
HANDLE h_orig;
|
|
226
|
+
HPEN hp_orig;
|
|
227
|
+
HBRUSH hb_orig;
|
|
228
|
+
HFONT hf_orig;
|
|
229
|
+
};
|
|
230
|
+
double rx;
|
|
231
|
+
double ry;
|
|
232
|
+
} RwCanvas;
|
|
233
|
+
|
|
234
|
+
typedef struct {
|
|
235
|
+
LRESULT retval;
|
|
236
|
+
} RwCancelDefWindowProc;
|
|
237
|
+
|
|
238
|
+
typedef struct {
|
|
239
|
+
int nargs;
|
|
240
|
+
ULONG_PTR procaddress;
|
|
241
|
+
} CFuncData;
|
|
242
|
+
|
|
243
|
+
typedef struct {
|
|
244
|
+
char* dtstr;
|
|
245
|
+
int dtoffset;
|
|
246
|
+
size_t dtlen;
|
|
247
|
+
VALUE dtparent;
|
|
248
|
+
VALUE* dtreferences;
|
|
249
|
+
BYTE dtwrapped;
|
|
250
|
+
BYTE bifunc;
|
|
251
|
+
WORD prindex; /* index of parent for ArrayPart*/
|
|
252
|
+
} CStructData;
|
|
253
|
+
|
|
254
|
+
typedef struct {
|
|
255
|
+
RwWindow rwwin;
|
|
256
|
+
VALUE param;
|
|
257
|
+
BOOL modal;
|
|
258
|
+
} RwDialog;
|
|
259
|
+
|
|
260
|
+
typedef struct{
|
|
261
|
+
void* himage;
|
|
262
|
+
} RwImage;
|
|
263
|
+
|
|
264
|
+
/* Global variable for message loop */
|
|
265
|
+
extern RwWindow *activewin;
|
|
266
|
+
|
|
267
|
+
/* Definitions of TypedData */
|
|
268
|
+
#ifndef HAVE_TYPE_RB_DATA_TYPE_T
|
|
269
|
+
# error "Need HAVE_TYPE_RB_DATA_TYPE_T"
|
|
270
|
+
#endif
|
|
271
|
+
|
|
272
|
+
extern const rb_data_type_t cfunc_data_type;
|
|
273
|
+
extern const rb_data_type_t cstruct_data_type;
|
|
274
|
+
extern const rb_data_type_t rwwin_data_type;
|
|
275
|
+
extern const rb_data_type_t rw_candefwndprc_d_type;
|
|
276
|
+
extern const rb_data_type_t rwcanvas_data_type;
|
|
277
|
+
extern const rb_data_type_t rwfont_data_type;
|
|
278
|
+
extern const rb_data_type_t rwicon_data_type;
|
|
279
|
+
extern const rb_data_type_t rwcursor_data_type;
|
|
280
|
+
extern const rb_data_type_t rwbitmap_data_type;
|
|
281
|
+
extern const rb_data_type_t rwpen_data_type;
|
|
282
|
+
extern const rb_data_type_t rwbrush_data_type;
|
|
283
|
+
extern const rb_data_type_t rwimagelist_data_type;
|
|
284
|
+
extern const rb_data_type_t rwmenu_data_type;
|
|
285
|
+
extern const rb_data_type_t rwimage_data_type;
|
|
286
|
+
|
|
287
|
+
#define CFunc_Data_Make_Struct(obj, sval) \
|
|
288
|
+
TypedData_Make_Struct(obj, CFuncData, &cfunc_data_type, sval)
|
|
289
|
+
|
|
290
|
+
#define CFunc_Data_Get_Struct(obj, sval) \
|
|
291
|
+
TypedData_Get_Struct(obj, CFuncData, &cfunc_data_type, sval)
|
|
292
|
+
|
|
293
|
+
#define CStruct_Data_Make_Struct(obj, sval) \
|
|
294
|
+
TypedData_Make_Struct(obj, CStructData, &cstruct_data_type, sval)
|
|
295
|
+
|
|
296
|
+
#define CStruct_Data_Get_Struct(obj, sval) \
|
|
297
|
+
TypedData_Get_Struct(obj, CStructData, &cstruct_data_type, sval)
|
|
298
|
+
|
|
299
|
+
#define RwWindow_Data_Make_Struct(obj, sval) \
|
|
300
|
+
TypedData_Make_Struct(obj, RwWindow, &rwwin_data_type, sval)
|
|
301
|
+
|
|
302
|
+
#define RwWindow_Data_Get_Struct(obj, sval) \
|
|
303
|
+
TypedData_Get_Struct(obj, RwWindow, &rwwin_data_type, sval)
|
|
304
|
+
|
|
305
|
+
#define RwDialog_Data_Make_Struct(obj, sval) \
|
|
306
|
+
TypedData_Make_Struct(obj, RwDialog, &rwdlg_data_type, sval)
|
|
307
|
+
|
|
308
|
+
#define RwDialog_Data_Get_Struct(obj, sval) \
|
|
309
|
+
TypedData_Get_Struct(obj, RwDialog, &rwdlg_data_type, sval)
|
|
310
|
+
|
|
311
|
+
#define RwCanvas_Data_Make_Struct(obj, sval) \
|
|
312
|
+
TypedData_Make_Struct(obj, RwCanvas, &rwcanvas_data_type, sval)
|
|
313
|
+
|
|
314
|
+
#define RwCanvas_Data_Get_Struct(obj, sval) \
|
|
315
|
+
TypedData_Get_Struct(obj, RwCanvas, &rwcanvas_data_type, sval)
|
|
316
|
+
|
|
317
|
+
#define RwFont_Data_Make_Struct(obj, sval) \
|
|
318
|
+
TypedData_Make_Struct(obj, RwFont, &rwfont_data_type, sval)
|
|
319
|
+
|
|
320
|
+
#define RwFont_Data_Get_Struct(obj, sval) \
|
|
321
|
+
TypedData_Get_Struct(obj, RwFont, &rwfont_data_type, sval)
|
|
322
|
+
|
|
323
|
+
#define RwIcon_Data_Make_Struct(obj, sval) \
|
|
324
|
+
TypedData_Make_Struct(obj, RwIcon, &rwicon_data_type, sval)
|
|
325
|
+
|
|
326
|
+
#define RwIcon_Data_Get_Struct(obj, sval) \
|
|
327
|
+
TypedData_Get_Struct(obj, RwIcon, &rwicon_data_type, sval)
|
|
328
|
+
|
|
329
|
+
#define RwCursor_Data_Make_Struct(obj, sval) \
|
|
330
|
+
TypedData_Make_Struct(obj, RwCursor, &rwcursor_data_type, sval)
|
|
331
|
+
|
|
332
|
+
#define RwCursor_Data_Get_Struct(obj, sval) \
|
|
333
|
+
TypedData_Get_Struct(obj, RwCursor, &rwcursor_data_type, sval)
|
|
334
|
+
|
|
335
|
+
#define RwBitmap_Data_Make_Struct(obj, sval) \
|
|
336
|
+
TypedData_Make_Struct(obj, RwBitmap, &rwbitmap_data_type, sval)
|
|
337
|
+
|
|
338
|
+
#define RwBitmap_Data_Get_Struct(obj, sval) \
|
|
339
|
+
TypedData_Get_Struct(obj, RwBitmap, &rwbitmap_data_type, sval)
|
|
340
|
+
|
|
341
|
+
#define RwPen_Data_Make_Struct(obj, sval) \
|
|
342
|
+
TypedData_Make_Struct(obj, RwPen, &rwpen_data_type, sval)
|
|
343
|
+
|
|
344
|
+
#define RwPen_Data_Get_Struct(obj, sval) \
|
|
345
|
+
TypedData_Get_Struct(obj, RwPen, &rwpen_data_type, sval)
|
|
346
|
+
|
|
347
|
+
#define RwBrush_Data_Make_Struct(obj, sval) \
|
|
348
|
+
TypedData_Make_Struct(obj, RwBrush, &rwbrush_data_type, sval)
|
|
349
|
+
|
|
350
|
+
#define RwBrush_Data_Get_Struct(obj, sval) \
|
|
351
|
+
TypedData_Get_Struct(obj, RwBrush, &rwbrush_data_type, sval)
|
|
352
|
+
|
|
353
|
+
#define RwImagelist_Data_Make_Struct(obj, sval) \
|
|
354
|
+
TypedData_Make_Struct(obj, RwImagelist, &rwimagelist_data_type, sval)
|
|
355
|
+
|
|
356
|
+
#define RwImagelist_Data_Get_Struct(obj, sval) \
|
|
357
|
+
TypedData_Get_Struct(obj, RwImagelist, &rwimagelist_data_type, sval)
|
|
358
|
+
|
|
359
|
+
#define RwMenu_Data_Make_Struct(obj, sval) \
|
|
360
|
+
TypedData_Make_Struct(obj, RwMenu, &rwmenu_data_type, sval)
|
|
361
|
+
|
|
362
|
+
#define RwMenu_Data_Get_Struct(obj, sval) \
|
|
363
|
+
TypedData_Get_Struct(obj, RwMenu, &rwmenu_data_type, sval)
|
|
364
|
+
|
|
365
|
+
#define RwImage_Data_Make_Struct(obj, sval) \
|
|
366
|
+
TypedData_Make_Struct(obj, RwImage, &rwimage_data_type, sval)
|
|
367
|
+
|
|
368
|
+
#define RwImage_Data_Get_Struct(obj, sval) \
|
|
369
|
+
TypedData_Get_Struct(obj, RwImage, &rwimage_data_type, sval)
|
|
370
|
+
|
|
371
|
+
/* Encoding */
|
|
372
|
+
extern VALUE internal_encoding, external_encoding, wchar_encoding;
|
|
373
|
+
extern rb_encoding *rw_internal_enc, *rw_external_enc, *rw_wchar_enc;
|
|
374
|
+
|
|
375
|
+
//inline TCHAR* rw_encode_internal(VALUE str);
|
|
376
|
+
TCHAR *rw_str2tchar(VALUE str);
|
|
377
|
+
WCHAR *rw_str2wchar(VALUE str);
|
|
378
|
+
TCHAR *rw_str2tchar2(VALUE str, size_t* bytesize);
|
|
379
|
+
|
|
380
|
+
VALUE rw_encode_external(TCHAR *buff);
|
|
381
|
+
VALUE rw_encode_external2(WCHAR *buff, int len);
|
|
382
|
+
|
|
383
|
+
/* prototyping */
|
|
384
|
+
// void cst_set_memory_to_struct(CStructData* sdtptr, char *target, const size_t len);
|
|
385
|
+
|
|
386
|
+
/* Unblocking functions (defined in 'rw_ubfunc.c')*/
|
|
387
|
+
#ifdef RWIN_USEMULTITHREAD
|
|
388
|
+
# define CALL_NON_GVL_FUNC(apiproc, calldata) \
|
|
389
|
+
(LONG_PTR)rb_thread_call_without_gvl((void*(*)(void*))apiproc, calldata, RUBY_UBF_IO, 0)
|
|
390
|
+
#else
|
|
391
|
+
# define CALL_NON_GVL_FUNC(apiproc, calldata) (LONG_PTR)apiproc(calldata)
|
|
392
|
+
#endif
|
|
393
|
+
|
|
394
|
+
ULONG_PTR rw_call_std_func_0(ULONG_PTR* arg);
|
|
395
|
+
ULONG_PTR rw_call_std_func_1(ULONG_PTR* arg);
|
|
396
|
+
ULONG_PTR rw_call_std_func_2(ULONG_PTR* arg);
|
|
397
|
+
ULONG_PTR rw_call_std_func_3(ULONG_PTR* arg);
|
|
398
|
+
ULONG_PTR rw_call_std_func_4(ULONG_PTR* arg);
|
|
399
|
+
ULONG_PTR rw_call_std_func_5(ULONG_PTR* arg);
|
|
400
|
+
ULONG_PTR rw_call_std_func_6(ULONG_PTR* arg);
|
|
401
|
+
ULONG_PTR rw_call_std_func_7(ULONG_PTR* arg);
|
|
402
|
+
ULONG_PTR rw_call_std_func_8(ULONG_PTR* arg);
|
|
403
|
+
ULONG_PTR rw_call_std_func_9(ULONG_PTR* arg);
|
|
404
|
+
ULONG_PTR rw_call_std_func_10(ULONG_PTR* arg);
|
|
405
|
+
ULONG_PTR rw_call_std_func_11(ULONG_PTR* arg);
|
|
406
|
+
ULONG_PTR rw_call_std_func_12(ULONG_PTR* arg);
|
|
407
|
+
|
|
408
|
+
ULONG_PTR rw_call_without_gvl_0(DWORD, FARPROC);
|
|
409
|
+
ULONG_PTR rw_call_without_gvl_1(DWORD, FARPROC, ULONG_PTR);
|
|
410
|
+
ULONG_PTR rw_call_without_gvl_2(DWORD, FARPROC, ULONG_PTR, ULONG_PTR);
|
|
411
|
+
ULONG_PTR rw_call_without_gvl_3(DWORD, FARPROC, ULONG_PTR, ULONG_PTR, ULONG_PTR);
|
|
412
|
+
ULONG_PTR rw_call_without_gvl_4(DWORD, FARPROC, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR);
|
|
413
|
+
ULONG_PTR rw_call_without_gvl_5(DWORD, FARPROC, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR);
|
|
414
|
+
ULONG_PTR rw_call_without_gvl_6(DWORD, FARPROC, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR);
|
|
415
|
+
ULONG_PTR rw_call_without_gvl_7(DWORD, FARPROC, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR);
|
|
416
|
+
ULONG_PTR rw_call_without_gvl_8(DWORD, FARPROC, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR);
|
|
417
|
+
ULONG_PTR rw_call_without_gvl_9(DWORD, FARPROC, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR);
|
|
418
|
+
ULONG_PTR rw_call_without_gvl_10(DWORD, FARPROC, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR);
|
|
419
|
+
ULONG_PTR rw_call_without_gvl_11(DWORD, FARPROC, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR);
|
|
420
|
+
ULONG_PTR rw_call_without_gvl_12(DWORD, FARPROC, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR);
|
|
421
|
+
|
|
422
|
+
/* prototypes */
|
|
423
|
+
LRESULT CALLBACK RwWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
424
|
+
void destroy_all_win(int);
|
|
425
|
+
VALUE cstruct_wrapptr(VALUE klass, char* pointer, VALUE parent);
|
|
426
|
+
VALUE rwcvs_new_from_hdc(VALUE klass, HDC hdc);
|
|
427
|
+
void rwgdiplus_shutdown();
|
|
428
|
+
VALUE stream2string(LPSTREAM pstream);
|
|
429
|
+
VALUE api_cstruct_new(VALUE klass);
|
|
430
|
+
void rwconv2absolute_path(char* dst, char* src);
|
|
431
|
+
void rwconv2absolute_pathW(wchar_t* dst, wchar_t* src);
|
|
432
|
+
|
|
433
|
+
/* prototypes of Initializer */
|
|
434
|
+
void Init_rwin();
|
|
435
|
+
void Init_rw_api();
|
|
436
|
+
void Init_rw_windows();
|
|
437
|
+
void Init_rw_dialog();
|
|
438
|
+
void Init_rw_resources();
|
|
439
|
+
void Init_rw_graphics();
|
|
440
|
+
void Init_rw_devices();
|
|
441
|
+
|
|
442
|
+
#endif /* __RWIN_H__ */
|