Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket/base
- (require ffi/unsafe
- ffi/unsafe/define)
- (define-ffi-definer define-user32 (ffi-lib "user32"))
- (define-ffi-definer define-kernel32 (ffi-lib "kernel32"))
- (define _WindowClassStyles
- (_bitmask
- '(CS_VREDRAW = #x0001
- CS_HREDRAW = #x0002
- CS_OWNDC = #x0020)))
- (define _ExtendedWindowStyles
- (_bitmask
- '(WS_VSCROLL = #x10000000
- WS_EX_CLIENTEDGE = #x00000200
- WS_EX_WINDOWEDGE = #x00000100)))
- (define CW_USEDEFAULT #x80000000)
- (define-cpointer-type _WNDPROC)
- (define-cpointer-type _HANDLE)
- (define-cpointer-type _HICON)
- (define-cpointer-type _HCURSOR)
- (define-cpointer-type _HBRUSH)
- (define-cpointer-type _LPCSTR)
- (define-cpointer-type _HMENU)
- (define-cpointer-type _LPVOID)
- (define-cstruct _WNDCLASSEXA ([cbSize _uint32]
- [style _WindowClassStyles]
- [lpfnWndProc _WNDPROC/null]
- [cbClsExtra _uint32]
- [cbWndExtra _uint32]
- [hInstance _HANDLE/null]
- [hIcon _HICON/null]
- [hCursor _HCURSOR/null]
- [hbrBackground _HBRUSH/null]
- [lpszMenuName _string/utf-8]
- [lpszClassName _string/utf-8]
- [hIconSm _HICON/null]))
- (define-kernel32 GetModuleHandleA (_fun _pointer -> _HANDLE/null))
- (define-user32 RegisterClassExA (_fun _WNDCLASSEXA-pointer -> _ushort))
- (define WindowClass
- (make-WNDCLASSEXA
- (ctype-sizeof _WNDCLASSEXA)
- '(CS_HREDRAW CS_VREDRAW CS_OWNDC)
- #f
- 0
- 0
- (GetModuleHandleA #f)
- #f
- #f
- #f
- #f
- "HandmadeHeroWindowClass"
- #f))
- (RegisterClassExA WindowClass)
- (define-user32 CreateWindowExA (_fun
- _uint32 ;; dwExStyle
- _string/utf-8 ;; lpClassName
- _string/utf-8 ;; lpWindowName
- _ExtendedWindowStyles ;; dwStyle
- _uint32 ;; X
- _uint32 ;; Y
- _uint32 ;; nWidth
- _uint32 ;; nHeight
- _HANDLE/null ;; hWndParent
- _HMENU/null ;; hMenu
- _HANDLE/null ;; hInstance
- _LPVOID/null ;; lpParam
- -> _HANDLE))
- (CreateWindowExA
- 0
- (WNDCLASSEXA-lpszClassName WindowClass)
- "Handmade Hero in Racket"
- '(WS_EX_WINDOWEDGE WS_EX_CLIENTEDGE WS_VSCROLL)
- CW_USEDEFAULT
- CW_USEDEFAULT
- CW_USEDEFAULT
- CW_USEDEFAULT
- #f
- #f
- (GetModuleHandleA #f)
- #f)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement