win32.monkey2 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. #rem
  2. This is just enough to create a window and get a simply message loop running. More to come once I get c2mx2 running again...
  3. Notes:
  4. WndProc function MUST be a plain static functions.
  5. The LRESULT_WINAPI hack is for forcing functions to be 'stdcall'. Will probably add calling convention support later...
  6. Haven't converted any types with same name as mx2 types, eg: BYTE, UBYTE etc.
  7. Haven't converted any pointer types, eg: LPDWORD. Should I?
  8. Data types source:
  9. https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751
  10. #end
  11. Namespace win32
  12. #If __TARGET__="windows"
  13. #Import "<libc>"
  14. #Import "<kernel32.lib>"
  15. #Import "<user32.lib>"
  16. #import "<windows.h>"
  17. Extern
  18. Alias CHAR:UByte 'signedness?
  19. Alias WCHAR:UShort 'signedness?
  20. Alias WORD:UShort
  21. Alias DWORD:UInt
  22. Alias ATOM:WORD
  23. Alias BOOL_:Int="BOOL"
  24. Alias LONG_:Int="LONG"
  25. Alias LONG_PTR:Int 'long on 64 bit?
  26. Alias UINT_PTR:UInt 'ulong on 64bit?
  27. Alias LRESULT:LONG_PTR
  28. Alias LPARAM:LONG_PTR
  29. Alias WPARAM:UINT_PTR
  30. Alias HANDLE:Void Ptr
  31. Alias HWND:HANDLE
  32. Alias HMENU:HANDLE
  33. Alias HMODULE:HANDLE
  34. Alias HINSTANCE:HANDLE
  35. Alias HBITMAP:HANDLE
  36. Alias HBRUSH:HANDLE
  37. Alias HCURSOR:HANDLE
  38. Alias HDC:HANDLE
  39. Alias HICON:HANDLE
  40. Alias LRESULT_WINAPI:LRESULT="LRESULT WINAPI" 'cheezy as hell!
  41. Alias WNDPROC:LRESULT_WINAPI( hwnd:HWND,uMsg:UInt,wParam:WPARAM,lParam:LPARAM )
  42. Struct WNDCLASSW
  43. Field style:UInt
  44. Field lpfnWndProc:WNDPROC
  45. Field cbClsExtra:Int
  46. Field cbWndExtra:Int
  47. Field hInstance:HINSTANCE
  48. Field hIcon:HICON
  49. Field hCursor:HCURSOR
  50. Field hbrBackground:HBRUSH
  51. Field lpszMenuName:WCHAR Ptr
  52. Field lpszClassName:WCHAR Ptr
  53. End
  54. Struct POINT
  55. Field x:LONG_
  56. Field y:LONG_
  57. End
  58. Struct RECT
  59. Field left:LONG_
  60. Field top:LONG_
  61. Field right:LONG_
  62. Field bottom:LONG_
  63. End
  64. Struct MSG
  65. Field hwnd:HWND
  66. Field message:UInt
  67. Field wParam:WPARAM
  68. Field lParam:LPARAM
  69. Field time:DWORD
  70. Field pt:POINT
  71. End
  72. Const MB_OK:UInt
  73. Const MB_OKCANCEL:UInt
  74. Const MB_RETRYCANCEL:UInt
  75. Const MB_YESNO:UInt
  76. Const MB_YESNOCANCEL:UInt
  77. Const IDNO:Int
  78. Const IDOK:Int
  79. Const IDRETRY:Int
  80. Const IDTRYAGAIN:Int
  81. Const IDYES:Int
  82. Const WS_OVERLAPPEDWINDOW:DWORD
  83. Const WS_POPUPWINDOW:DWORD
  84. Const WS_VISIBLE:DWORD
  85. Const WS_CHILD:DWORD
  86. Const WS_CLIPCHILDREN:DWORD
  87. Const WS_CLIPSIBLINGS:DWORD
  88. Const SM_CYVIRTUALSCREEN:Int
  89. Const SM_CXVIRTUALSCREEN:Int
  90. Const GWL_EXSTYLE:LONG_
  91. Const GWL_HINSTANCE:LONG_
  92. Const GWL_HWNDPARENT:LONG_
  93. Const GWL_ID:LONG_
  94. Const GWL_STYLE:LONG_
  95. Const GWL_USERDATA:LONG_
  96. Const GWL_WNDPROC:LONG_
  97. Const HWND_BOTTOM:HWND
  98. Const HWND_NOTOPMOST:HWND
  99. Const HWND_TOP:HWND
  100. Const HWND_TOPMOST:HWND
  101. Const SWP_ASYNCWINDOWPOS:UInt
  102. Const SWP_DEFERERASE:UInt
  103. Const SWP_DRAWFRAME:UInt
  104. Const SWP_FRAMECHANGED:UInt
  105. Const SWP_HIDEWINDOW:UInt
  106. Const SWP_NOACTIVATE:UInt
  107. Const SWP_NOCOPYBITS:UInt
  108. Const SWP_NOMOVE:UInt
  109. Const SWP_NOOWNERZORDER:UInt
  110. Const SWP_NOREDRAW:UInt
  111. Const SWP_NOREPOSITION:UInt
  112. Const SWP_NOSENDCHANGING:UInt
  113. Const SWP_NOSIZE:UInt
  114. Const SWP_NOZORDER:UInt
  115. Const SWP_SHOWWINDOW:UInt
  116. Const DELETE_:DWORD
  117. Const READ_CONTROL:DWORD
  118. Const SYNCHRONIZE:DWORD
  119. Const WRITE_DAC:DWORD
  120. Const WRITE_OWNER:DWORD
  121. Const STANDARD_RIGHTS_ALL:DWORD
  122. Const STANDARD_RIGHTS_EXECUTE:DWORD
  123. Const STANDARD_RIGHTS_READ:DWORD
  124. Const STANDARD_RIGHTS_REQUIRED:DWORD
  125. Const STANDARD_RIGHTS_WRITE:DWORD
  126. 'kernel32
  127. Function GetModuleHandleW:HMODULE( lpModuleName:WCHAR Ptr )
  128. Function OpenProcess:HANDLE( dwDesiredAccess:DWORD,bInheritHandle:BOOL_,dwProcessId:DWORD )
  129. Function GetCurrentProcess:HANDLE()
  130. Function CloseHandle:BOOL_( hObject:HANDLE )
  131. 'user32
  132. Function MessageBoxW:Int( hWnd:HWND,lpText:WString,lpCaption:WString,uType:UInt )
  133. Function RegisterClassW:ATOM( lpWndClass:WNDCLASSW Ptr )
  134. Function CreateWindowW:HWND( lpClassName:WString,lpWindowName:WString,dwStyle:DWORD,x:Int,y:Int,nWidth:Int,nHeight:Int,hWndParent:HWND,hMenu:HMENU,hInstance:HINSTANCE,lpParam:Void Ptr )
  135. Function DefWindowProcW:LRESULT_WINAPI( hwnd:HWND,uMsg:UInt,wParam:WPARAM,lParam:LPARAM )
  136. Function GetClientRect:BOOL_( hWnd:HWND,lpRect:RECT Ptr )
  137. Function SetParent:HWND( child:HWND,parent:HWND )
  138. Function FindWindowW:HWND( lpClassName:WString,lpWindowName:WString )
  139. Function SetWindowPos:BOOL_( hWnd:HWND,hWndInsertAfter:HWND,x:Int,y:Int,cx:Int,cy:Int,flags:UInt )
  140. Function SetWindowLong:LONG_( hWnd:HWND,nIndex:Int,dwNewLong:LONG_ )
  141. Function GetWindowLong:LONG_( hWnd:HWND,nIndex:Int )
  142. Function GetMessage:BOOL_( lpMsg:MSG Ptr,hWnd:HWND,wMsgFilterMin:UInt,wMsgFilterMax:UInt )
  143. Function TranslateMessage:BOOL_( lpMsg:MSG Ptr )
  144. Function DispatchMessage:LRESULT( lpMsg:MSG Ptr )
  145. Function GetCommandLineW:WString()
  146. Function GetSystemMetrics:Int( nIndex:Int )
  147. Function GetWindowThreadProcessId:DWORD( hWnd:HWND,lpdwProcessId:DWORD Ptr )
  148. #End