2222module 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
3535end
3636
@@ -72,11 +72,15 @@ ID_EDIT_BOX = 600
7272nARGV = Array .new(ARGC_UNSAFE ) do |i |
7373 String .new(ARGV_UNSAFE [i])
7474end
75- pARGV = (PROGRAM_NAME + " " + nARGV.join(" " ) + " \0 " ).to_utf16
75+ pARGV = (PROGRAM_NAME + " " + nARGV.join(" " )).to_utf16
7676
7777winARGV = Win32cr ::UI ::Shell ::C .CommandLineToArgvW (pARGV, out winARGC)
7878hInstance = 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
8084hPrevInstance = Pointer (Void ).null
8185AppData .hInstance = hInstance
8286AppData .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
166170funptr = - > 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
178186if 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
182190end
183191
184192hwnd = 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
201209AppData .hwnd = hwnd
202210
203211Win32cr ::UI ::WindowsAndMessaging ::C .ShowWindow (hwnd, Win32cr ::UI ::WindowsAndMessaging ::SHOW_WINDOW_CMD ::SW_NORMAL )
204212Win32cr ::UI ::WindowsAndMessaging ::C .DrawMenuBar (hwnd)
205- Win32cr ::UI :: WindowsAndMessaging ::C .UpdateWindow (hwnd)
213+ Win32cr ::Graphics :: Gdi ::C .UpdateWindow (hwnd)
206214
207215while (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
0 commit comments