87 lines
2.9 KiB
Racket
87 lines
2.9 KiB
Racket
#lang racket/base
|
|
(require ffi/unsafe
|
|
ffi/unsafe/define
|
|
"../common/utils.rkt"
|
|
"types.rkt")
|
|
|
|
(provide define-gdi32
|
|
define-user32
|
|
define-kernel32
|
|
define-comctl32
|
|
define-uxtheme
|
|
define-mz
|
|
failed
|
|
|
|
GetWindowLongW
|
|
SetWindowLongW
|
|
SendMessageW SendMessageW/str
|
|
GetSysColor GetRValue GetGValue GetBValue
|
|
MoveWindow
|
|
ShowWindow
|
|
EnableWindow
|
|
SetWindowTextW
|
|
SetCursor
|
|
GetDC
|
|
ReleaseDC
|
|
InvalidateRect
|
|
GetMenuState
|
|
CheckMenuItem
|
|
ModifyMenuW
|
|
RemoveMenu)
|
|
|
|
(define gdi32-lib (ffi-lib "gdi32.dll"))
|
|
(define user32-lib (ffi-lib "user32.dll"))
|
|
(define kernel32-lib (ffi-lib "kernel32.dll"))
|
|
(define comctl32-lib (ffi-lib "comctl32.dll"))
|
|
(define uxtheme-lib (ffi-lib "uxtheme.dll"))
|
|
|
|
(define-ffi-definer define-gdi32 gdi32-lib)
|
|
(define-ffi-definer define-user32 user32-lib)
|
|
(define-ffi-definer define-kernel32 kernel32-lib)
|
|
(define-ffi-definer define-comctl32 comctl32-lib)
|
|
(define-ffi-definer define-uxtheme uxtheme-lib)
|
|
|
|
(define-kernel32 GetLastError (_wfun -> _DWORD))
|
|
|
|
(define (failed who)
|
|
(error who "call failed (~s)"
|
|
(GetLastError)))
|
|
|
|
(define-user32 GetWindowLongW (_wfun _HWND _int -> _pointer))
|
|
(define-user32 SetWindowLongW (_wfun _HWND _int _pointer -> _pointer))
|
|
|
|
(define-user32 SendMessageW (_wfun _HWND _UINT _WPARAM _LPARAM -> _LRESULT))
|
|
(define-user32 SendMessageW/str (_wfun _HWND _UINT _WPARAM _string/utf-16 -> _LRESULT)
|
|
#:c-id SendMessageW)
|
|
|
|
(define-user32 GetSysColor (_wfun _int -> _DWORD))
|
|
|
|
(define (GetRValue v) (bitwise-and v #xFF))
|
|
(define (GetGValue v) (bitwise-and (arithmetic-shift v -8) #xFF))
|
|
(define (GetBValue v) (bitwise-and (arithmetic-shift v -16) #xFF))
|
|
|
|
(define-user32 MoveWindow(_wfun _HWND _int _int _int _int _BOOL -> (r : _BOOL)
|
|
-> (unless r (failed 'MoveWindow))))
|
|
|
|
(define-user32 ShowWindow (_wfun _HWND _int -> (previously-shown? : _BOOL) -> (void)))
|
|
(define-user32 EnableWindow (_wfun _HWND _BOOL -> _BOOL))
|
|
|
|
(define-user32 SetWindowTextW (_wfun _HWND _string/utf-16 -> (r : _BOOL)
|
|
-> (unless r (failed 'SetWindowText))))
|
|
|
|
(define-user32 SetCursor (_wfun _HCURSOR -> _HCURSOR))
|
|
|
|
(define-user32 GetDC (_wfun _HWND -> _HDC))
|
|
(define-user32 ReleaseDC (_wfun _HWND _HDC -> _int))
|
|
|
|
(define-user32 InvalidateRect (_wfun _HWND (_or-null _RECT-pointer) _BOOL -> (r : _BOOL)
|
|
-> (unless r (failed 'InvalidateRect))))
|
|
|
|
(define-user32 GetMenuState (_wfun _HMENU _UINT _UINT -> _UINT))
|
|
(define-user32 CheckMenuItem (_wfun _HMENU _UINT _UINT -> _DWORD))
|
|
(define-user32 ModifyMenuW (_wfun _HMENU _UINT _UINT _UINT_PTR _string/utf-16
|
|
-> (r : _BOOL)
|
|
-> (unless r (failed 'ModifyMenuW))))
|
|
(define-user32 RemoveMenu (_wfun _HMENU _UINT _UINT -> (r : _BOOL)
|
|
-> (unless r (failed 'RemoveMenu))))
|