Skip to content

Commit 79b261a

Browse files
authored
Merge pull request #50 from mjblack/code_update_for_structs
Update structs, dll_exceptions, textbox example
2 parents 739543e + 02d9e43 commit 79b261a

294 files changed

Lines changed: 130491 additions & 97968 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

dll_exceptions.json

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,65 @@
11
[
22
"api-ms-win-core-enclave-l1-1-1",
33
"api-ms-win-core-state-helpers-l1-1-0",
4-
"api-ms-win-core-handle-l1-1-0"
4+
"api-ms-win-core-handle-l1-1-0",
5+
"api-ms-win-core-psm-appnotify-l1-1-1",
6+
"api-ms-win-core-psm-appnotify-l1-1-0",
7+
"api-ms-win-core-path-l1-1-0",
8+
"api-ms-win-shcore-scaling-l1-1-2",
9+
"api-ms-win-shcore-scaling-l1-1-1",
10+
"api-ms-win-shcore-scaling-l1-1-0",
11+
"api-ms-win-core-comm-l1-1-1",
12+
"api-ms-win-core-comm-l1-1-2",
13+
"api-ms-win-devices-query-l1-1-0",
14+
"api-ms-win-devices-query-l1-1-1",
15+
"api-ms-win-gaming-expandedresources-l1-1-0",
16+
"api-ms-win-gaming-deviceinformation-l1-1-0",
17+
"api-ms-win-gaming-tcui-l1-1-0",
18+
"api-ms-win-gaming-tcui-l1-1-1",
19+
"api-ms-win-gaming-tcui-l1-1-2",
20+
"api-ms-win-gaming-tcui-l1-1-3",
21+
"api-ms-win-gaming-tcui-l1-1-4",
22+
"api-ms-win-mm-misc-l1-1-1",
23+
"api-ms-win-core-winrt-string-l1-1-0",
24+
"api-ms-win-core-winrt-string-l1-1-1",
25+
"api-ms-win-core-winrt-l1-1-0",
26+
"api-ms-win-core-winrt-robuffer-l1-1-0",
27+
"api-ms-win-core-winrt-error-l1-1-0",
28+
"api-ms-win-core-winrt-error-l1-1-1",
29+
"api-ms-win-core-winrt-roparameterizediid-l1-1-0",
30+
"api-ms-win-core-winrt-registration-l1-1-0",
31+
"api-ms-win-shcore-stream-winrt-l1-1-0",
32+
"api-ms-win-dx-d3dkmt-l1-1-0",
33+
"api-ms-win-core-featurestaging-l1-1-0",
34+
"api-ms-win-core-featurestaging-l1-1-1",
35+
"api-ms-win-core-backgroundtask-l1-1-0",
36+
"api-ms-win-core-realtime-l1-1-1",
37+
"api-ms-win-core-realtime-l1-1-2",
38+
"api-ms-win-core-apiquery-l2-1-0",
39+
"api-ms-win-core-wow64-l1-1-1",
40+
"api-ms-win-net-isolation-l1-1-0",
41+
"api-ms-win-core-slapi-l1-1-0",
42+
"api-ms-win-security-isolatedcontainer-l1-1-1",
43+
"api-ms-win-security-isolatedcontainer-l1-1-0",
44+
"api-ms-win-security-base-l1-2-2",
45+
"api-ms-win-core-file-fromapp-l1-1-0",
46+
"api-ms-win-core-ioring-l1-1-0",
47+
"api-ms-win-appmodel-runtime-l1-1-1",
48+
"api-ms-win-appmodel-runtime-l1-1-3",
49+
"api-ms-win-core-util-l1-1-1",
50+
"api-ms-win-core-errorhandling-l1-1-3",
51+
"api-ms-win-core-memory-l1-1-3",
52+
"api-ms-win-core-memory-l1-1-7",
53+
"api-ms-win-core-memory-l1-1-4",
54+
"api-ms-win-core-memory-l1-1-5",
55+
"api-ms-win-core-memory-l1-1-6",
56+
"api-ms-win-core-memory-l1-1-8",
57+
"api-ms-win-core-marshal-l1-1-0",
58+
"api-ms-win-service-core-l1-1-3",
59+
"api-ms-win-service-core-l1-1-4",
60+
"api-ms-win-service-core-l1-1-5",
61+
"api-ms-win-wsl-api-l1-1-0",
62+
"api-ms-win-core-sysinfo-l1-2-4",
63+
"api-ms-win-core-sysinfo-l1-2-0",
64+
"api-ms-win-core-sysinfo-l1-2-3"
565
]

examples/textbox.cr

Lines changed: 58 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ end
2222
module AppData
2323
class_property hInstance : Win32cr::Foundation::HINSTANCE = Pointer(Void).null
2424
class_property hPrevInstance : Void*?
25-
class_property hwnd : Win32cr::Foundation::HWND = Pointer(Win32cr::Foundation::HWND).new(sizeof(Win32cr::Foundation::HWND))
26-
class_property hwndEdit : Win32cr::Foundation::HWND = Pointer(Win32cr::Foundation::HWND).new(sizeof(Win32cr::Foundation::HWND))
25+
class_property hwnd : Win32cr::Foundation::HWND = Win32cr::Foundation::HWND.malloc(sizeof(Win32cr::Foundation::HWND))
26+
class_property hwndEdit : Win32cr::Foundation::HWND = Win32cr::Foundation::HWND.malloc(sizeof(Win32cr::Foundation::HWND))
2727

2828
def self.hwdEdit : Win32cr::Foundation::HWND
29-
if @@hwndEdit.nil?
29+
if h = @@hwndEdit
30+
h
31+
else
3032
raise Exception.new("hwndEdit was nil!")
3133
end
32-
h = @@hwndEdit.not_nil!
33-
h
3434
end
3535
end
3636

@@ -72,11 +72,15 @@ ID_EDIT_BOX = 600
7272
nARGV = Array.new(ARGC_UNSAFE) do |i|
7373
String.new(ARGV_UNSAFE[i])
7474
end
75-
pARGV = (PROGRAM_NAME + " " + nARGV.join(" ") + "\0").to_utf16
75+
pARGV = (PROGRAM_NAME + " " + nARGV.join(" ")).to_utf16
7676

7777
winARGV = Win32cr::UI::Shell::C.CommandLineToArgvW(pARGV, out winARGC)
7878
hInstance = Win32cr::System::LibraryLoader::C.GetModuleHandleW(nil)
79-
G_HINSTANCE = hInstance
79+
if hInstance.null?
80+
puts "Failed to get module handle"
81+
exit 1
82+
end
83+
HINSTANCE = hInstance
8084
hPrevInstance = Pointer(Void).null
8185
AppData.hInstance = hInstance
8286
AppData.hPrevInstance = hPrevInstance
@@ -96,7 +100,7 @@ def winproc(hwnd : Win32cr::Foundation::HWND, uMsg : UInt32, wParam : Win32cr::F
96100

97101
if Win32cr::UI::WindowsAndMessaging::C.SetMenu(hwnd, hMenu) == 0
98102
if (err = LibC.GetLastError) > 0
99-
Win32cr::UI::WindowsAndMessaging::C.MessageBoxW(nil, "Got error #{err}".to_utf16, "winapp log".to_utf16, Win32cr::UI::WindowsAndMessaging::C::MESSAGEBOX_STYLE::MB_OK)
103+
Win32cr::UI::WindowsAndMessaging::C.MessageBoxW(nil, "Got error #{err}".to_utf16, "winapp log".to_utf16, Win32cr::UI::WindowsAndMessaging::MESSAGEBOX_STYLE::MB_OK)
100104
end
101105
end
102106

@@ -107,9 +111,9 @@ def winproc(hwnd : Win32cr::Foundation::HWND, uMsg : UInt32, wParam : Win32cr::F
107111
end
108112

109113
hwndEdit = Win32cr::UI::WindowsAndMessaging::C.CreateWindowExW(
110-
Win32cr::UI::WindowsAndMessaging::WINDOW_EX_STYLE::WS_EX_LEFT, # Optional window styles
111-
"EDIT".to_utf16, # Window class
112-
nil, # Application Name
114+
Win32cr::UI::WindowsAndMessaging::WINDOW_EX_STYLE::WS_EX_LEFT, # Optional window styles
115+
"EDIT".to_utf16, # Window class
116+
nil, # Application Name
113117
Win32cr::UI::WindowsAndMessaging::WINDOW_STYLE::WS_CHILD |
114118
Win32cr::UI::WindowsAndMessaging::WINDOW_STYLE::WS_VISIBLE |
115119
Win32cr::UI::WindowsAndMessaging::WINDOW_STYLE::WS_BORDER |
@@ -121,18 +125,18 @@ def winproc(hwnd : Win32cr::Foundation::HWND, uMsg : UInt32, wParam : Win32cr::F
121125
10,
122126
100,
123127
50,
124-
hwnd, # Parent window
125-
nil, # Menu
126-
lParam.unsafe_as(Pointer(Win32cr::UI::WindowsAndMessaging::CREATESTRUCTW)).value.h_instance, # Instance handle
127-
nil # Additional application data
128+
hwnd, # Parent window
129+
0_i64, # Menu
130+
lParam.unsafe_as(Pointer(Win32cr::UI::WindowsAndMessaging::CREATESTRUCTW)).value.hInstance, # Instance handle
131+
nil # Additional application data
128132
)
129133

130134
if (err = LibC.GetLastError) > 0
131-
Win32cr::UI::WindowsAndMessaging::C.MessageBoxW(nil, "Got error #{err}".to_utf16, "winapp log".to_utf16, LibWin32::MESSAGEBOX_STYLE::MB_OK)
135+
Win32cr::UI::WindowsAndMessaging::C.MessageBoxW(nil, "Got error #{err}".to_utf16, "winapp log".to_utf16, Win32cr::UI::WindowsAndMessaging::MESSAGEBOX_STYLE::MB_OK)
132136
end
133137
AppData.hwndEdit = hwndEdit
134138
when Win32cr::UI::WindowsAndMessaging::WM_SETFOCUS
135-
Win32cr::UI::WindowsAndMessaging::C.SetFocus(AppData.hwndEdit.not_nil!)
139+
Win32cr::UI::Input::KeyboardAndMouse::C.SetFocus(AppData.hwndEdit.not_nil!)
136140
when Win32cr::UI::WindowsAndMessaging::WM_SIZE
137141
Win32cr::UI::WindowsAndMessaging::C.MoveWindow(AppData.hwndEdit.unsafe_as(Win32cr::Foundation::HWND), 0, 0, loword(lParam), hiword(pointerof(lParam)), 1)
138142
when Win32cr::UI::WindowsAndMessaging::WM_COMMAND
@@ -146,12 +150,12 @@ def winproc(hwnd : Win32cr::Foundation::HWND, uMsg : UInt32, wParam : Win32cr::F
146150
when Win32cr::UI::WindowsAndMessaging::WM_DESTROY
147151
Win32cr::UI::WindowsAndMessaging::C.PostQuitMessage(0)
148152
when Win32cr::UI::WindowsAndMessaging::WM_PAINT
149-
ps = Win32cr::Graphics::Gdi::PAINTSTRUCT.new
150-
hdc = Win32cr::Graphics::Gdi::C.BeginPaint(hwnd, pointerof(ps))
151-
psrcPaint = ps.rc_paint
153+
ps = Pointer(Win32cr::Graphics::Gdi::PAINTSTRUCT).malloc(sizeof(Win32cr::Graphics::Gdi::PAINTSTRUCT))
154+
hdc = Win32cr::Graphics::Gdi::C.BeginPaint(hwnd, ps)
155+
psrcPaint = ps.value.rcPaint
152156
Win32cr::Graphics::Gdi::C.FillRect(hdc, pointerof(psrcPaint), (Win32cr::UI::WindowsAndMessaging::SYS_COLOR_INDEX::COLOR_WINDOW + 1).unsafe_as(Win32cr::Graphics::Gdi::HBRUSH))
153-
ps.rc_paint = psrcPaint
154-
Win32cr::Graphics::Gdi::C.EndPaint(hwnd, pointerof(ps))
157+
ps.value.rcPaint = psrcPaint
158+
Win32cr::Graphics::Gdi::C.EndPaint(hwnd, ps)
155159
else
156160
return Win32cr::UI::WindowsAndMessaging::C.DefWindowProcW(hwnd, uMsg, wParam, lParam)
157161
end
@@ -160,20 +164,24 @@ end
160164

161165

162166

163-
icon = nil
164-
cursor = nil
167+
icon = 0_i64
168+
cursor = 0_i64
165169

166170
funptr =->winproc(Win32cr::Foundation::HWND, UInt32, Win32cr::Foundation::WPARAM, Win32cr::Foundation::LPARAM)
167-
wc = Win32cr::UI::WindowsAndMessaging::WNDCLASSEXW.new
168-
wc.cb_size = sizeof(Win32cr::UI::WindowsAndMessaging::WNDCLASSEXW)
169-
wc.lpfn_wnd_proc = funptr
170-
wc.lpsz_class_name = CLASS_NAME
171-
#wc.lpszMenuName = to_lpcwstr("MNU_MAIN")
172-
wc.style = Win32cr::UI::WindowsAndMessaging::WNDCLASS_STYLES::CS_HREDRAW | Win32cr::UI::WindowsAndMessaging::WNDCLASS_STYLES::CS_VREDRAW
173-
wc.cb_cls_extra = 0
174-
wc.cb_wnd_extra = 0
175-
wc.h_instance = hInstance
176-
wc.h_icon = icon
171+
wc = Win32cr::UI::WindowsAndMessaging::WNDCLASSEXW.new(
172+
cbSize: sizeof(Win32cr::UI::WindowsAndMessaging::WNDCLASSEXW).to_u32,
173+
lpfnWndProc: funptr,
174+
lpszClassName: CLASS_NAME.to_unsafe,
175+
lpszMenuName: Pointer(UInt16).null,
176+
style: Win32cr::UI::WindowsAndMessaging::WNDCLASS_STYLES::CS_HREDRAW | Win32cr::UI::WindowsAndMessaging::WNDCLASS_STYLES::CS_VREDRAW,
177+
cbClsExtra: 0,
178+
cbWndExtra: 0,
179+
hInstance: hInstance,
180+
hIcon: icon,
181+
hCursor: cursor,
182+
hbrBackground: 0_i64,
183+
hIconSm: icon
184+
)
177185

178186
if Win32cr::UI::WindowsAndMessaging::C.RegisterClassExW(pointerof(wc)) == 0
179187
err = LibC.GetLastError
@@ -182,27 +190,27 @@ if Win32cr::UI::WindowsAndMessaging::C.RegisterClassExW(pointerof(wc)) == 0
182190
end
183191

184192
hwnd = Win32cr::UI::WindowsAndMessaging::C.CreateWindowExW(
185-
Win32cr::UI::WindowsAndMessaging::WINDOW_EX_STYLE::WS_EX_LEFT, # Optional window styles
186-
CLASS_NAME, # Window class
187-
APP_NAME, # Application Name
188-
LibWin32::WINDOW_STYLE::WS_OVERLAPPEDWINDOW, # Window style
189-
190-
# Size and position
191-
Win32cr::UI::WindowsAndMessaging::CW_USEDEFAULT,
192-
Win32cr::UI::WindowsAndMessaging::CW_USEDEFAULT,
193-
Win32cr::UI::WindowsAndMessaging::CW_USEDEFAULT,
194-
Win32cr::UI::WindowsAndMessaging::CW_USEDEFAULT,
195-
nil, # Parent window
196-
nil, # Menu
197-
hInstance, # Instance handle
198-
nil # Additional application data
193+
Win32cr::UI::WindowsAndMessaging::WINDOW_EX_STYLE::WS_EX_LEFT, # Optional window styles
194+
CLASS_NAME, # Window class
195+
APP_NAME, # Application Name
196+
Win32cr::UI::WindowsAndMessaging::WINDOW_STYLE::WS_OVERLAPPEDWINDOW, # Window style
197+
198+
# Size and position
199+
Win32cr::UI::WindowsAndMessaging::CW_USEDEFAULT,
200+
Win32cr::UI::WindowsAndMessaging::CW_USEDEFAULT,
201+
Win32cr::UI::WindowsAndMessaging::CW_USEDEFAULT,
202+
Win32cr::UI::WindowsAndMessaging::CW_USEDEFAULT,
203+
nil, # Parent window
204+
0_i64, # Menu
205+
hInstance, # Instance handle
206+
nil # Additional application data
199207
)
200208

201209
AppData.hwnd = hwnd
202210

203211
Win32cr::UI::WindowsAndMessaging::C.ShowWindow(hwnd, Win32cr::UI::WindowsAndMessaging::SHOW_WINDOW_CMD::SW_NORMAL)
204212
Win32cr::UI::WindowsAndMessaging::C.DrawMenuBar(hwnd)
205-
Win32cr::UI::WindowsAndMessaging::C.UpdateWindow(hwnd)
213+
Win32cr::Graphics::Gdi::C.UpdateWindow(hwnd)
206214

207215
while (Win32cr::UI::WindowsAndMessaging::C.GetMessageW(out msg, nil, 0, 0) > 0)
208216
pmsg = pointerof(msg)
@@ -218,4 +226,4 @@ if (err = LibC.GetLastError) > 0
218226
if !err == Win32cr::Foundation::WIN32_ERROR::ERROR_INVALID_WINDOW_HANDLE
219227
Win32cr::UI::WindowsAndMessaging::C.MessageBoxW(nil, "Error code: #{err}".to_utf16, "Exit Error".to_utf16, Win32cr::UI::WindowsAndMessaging::MESSAGEBOX_STYLE::MB_ICONERROR)
220228
end
221-
end
229+
end

shard.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: win32cr
2-
version: 1.0.1
2+
version: 1.1.0
33

44
authors:
55
- Matthew J. Black <mjblack@gmail.com>

0 commit comments

Comments
 (0)