Advertisement
Guest User

Untitled

a guest
Oct 19th, 2021
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 2.82 KB | None | 0 0
  1. #lang racket/base
  2.  
  3. (require ffi/unsafe
  4.          ffi/unsafe/define)
  5.  
  6. (define-ffi-definer define-user32 (ffi-lib "user32"))
  7. (define-ffi-definer define-kernel32 (ffi-lib "kernel32"))
  8.  
  9. (define _WindowClassStyles
  10.   (_bitmask
  11.    '(CS_VREDRAW          = #x0001
  12.      CS_HREDRAW          = #x0002
  13.      CS_OWNDC            = #x0020)))
  14.  
  15. (define _ExtendedWindowStyles
  16.   (_bitmask
  17.    '(WS_VSCROLL              = #x10000000
  18.      WS_EX_CLIENTEDGE        = #x00000200
  19.      WS_EX_WINDOWEDGE        = #x00000100)))
  20.  
  21. (define CW_USEDEFAULT #x80000000)
  22.  
  23. (define-cpointer-type _WNDPROC)
  24. (define-cpointer-type _HANDLE)
  25. (define-cpointer-type _HICON)
  26. (define-cpointer-type _HCURSOR)
  27. (define-cpointer-type _HBRUSH)
  28. (define-cpointer-type _LPCSTR)
  29. (define-cpointer-type _HMENU)
  30. (define-cpointer-type _LPVOID)
  31.  
  32. (define-cstruct _WNDCLASSEXA ([cbSize _uint32]
  33.                               [style _WindowClassStyles]
  34.                               [lpfnWndProc _WNDPROC/null]
  35.                               [cbClsExtra _uint32]
  36.                               [cbWndExtra _uint32]
  37.                               [hInstance _HANDLE/null]
  38.                               [hIcon _HICON/null]
  39.                               [hCursor _HCURSOR/null]
  40.                               [hbrBackground _HBRUSH/null]
  41.                               [lpszMenuName _string/utf-8]
  42.                               [lpszClassName _string/utf-8]
  43.                               [hIconSm _HICON/null]))
  44.  
  45. (define-kernel32 GetModuleHandleA (_fun _pointer -> _HANDLE/null))
  46.  
  47. (define-user32 RegisterClassExA (_fun _WNDCLASSEXA-pointer -> _ushort))
  48.  
  49. (define WindowClass
  50.   (make-WNDCLASSEXA
  51.    (ctype-sizeof _WNDCLASSEXA)
  52.    '(CS_HREDRAW CS_VREDRAW CS_OWNDC)
  53.    #f
  54.    0
  55.    0
  56.    (GetModuleHandleA #f)
  57.    #f
  58.    #f
  59.    #f
  60.    #f
  61.    "HandmadeHeroWindowClass"
  62.    #f))
  63.  
  64. (RegisterClassExA WindowClass)
  65.  
  66. (define-user32 CreateWindowExA (_fun
  67.                                 _uint32 ;; dwExStyle
  68.                                 _string/utf-8 ;; lpClassName
  69.                                 _string/utf-8 ;; lpWindowName
  70.                                 _ExtendedWindowStyles ;; dwStyle
  71.                                 _uint32 ;; X
  72.                                 _uint32 ;; Y
  73.                                 _uint32 ;; nWidth
  74.                                 _uint32 ;; nHeight
  75.                                 _HANDLE/null ;; hWndParent
  76.                                 _HMENU/null ;; hMenu
  77.                                 _HANDLE/null ;; hInstance
  78.                                 _LPVOID/null ;; lpParam
  79.                                 -> _HANDLE))
  80.  
  81. (CreateWindowExA
  82.  0
  83.  (WNDCLASSEXA-lpszClassName WindowClass)
  84.  "Handmade Hero in Racket"
  85.  '(WS_EX_WINDOWEDGE WS_EX_CLIENTEDGE WS_VSCROLL)
  86.  CW_USEDEFAULT
  87.  CW_USEDEFAULT
  88.  CW_USEDEFAULT
  89.  CW_USEDEFAULT
  90.  #f
  91.  #f
  92.  (GetModuleHandleA #f)
  93.  #f)
  94.  
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement