! Copyright (C) 2005, 2006 Doug Coleman. ! See http://factor.sf.net/license.txt for BSD license. USING: alien parser namespaces kernel syntax words math io prettyprint ; IN: win32-api ! HKL for ActivateKeyboardLayout : HKL_PREV 0 ; : HKL_NEXT 1 ; : CW_USEDEFAULT HEX: 80000000 ; : WS_OVERLAPPED HEX: 00000000 ; : WS_POPUP HEX: 80000000 ; : WS_CHILD HEX: 40000000 ; : WS_MINIMIZE HEX: 20000000 ; : WS_VISIBLE HEX: 10000000 ; : WS_DISABLED HEX: 08000000 ; : WS_CLIPSIBLINGS HEX: 04000000 ; : WS_CLIPCHILDREN HEX: 02000000 ; : WS_MAXIMIZE HEX: 01000000 ; : WS_CAPTION HEX: 00C00000 ; ! /* WS_BORDER | WS_DLGFRAME */ : WS_BORDER HEX: 00800000 ; : WS_DLGFRAME HEX: 00400000 ; : WS_VSCROLL HEX: 00200000 ; : WS_HSCROLL HEX: 00100000 ; : WS_SYSMENU HEX: 00080000 ; : WS_THICKFRAME HEX: 00040000 ; : WS_GROUP HEX: 00020000 ; : WS_TABSTOP HEX: 00010000 ; : WS_MINIMIZEBOX HEX: 00020000 ; : WS_MAXIMIZEBOX HEX: 00010000 ; ! Common window styles : WS_OVERLAPPEDWINDOW WS_OVERLAPPED WS_CAPTION WS_SYSMENU WS_THICKFRAME WS_MINIMIZEBOX WS_MAXIMIZEBOX bitor bitor bitor bitor bitor ; : WS_POPUPWINDOW WS_POPUP WS_BORDER WS_SYSMENU bitor bitor ; : WS_CHILDWINDOW WS_CHILD ; : WS_TILED WS_OVERLAPPED ; : WS_ICONIC WS_MINIMIZE ; : WS_SIZEBOX WS_THICKFRAME ; : WS_TILEDWINDOW WS_OVERLAPPEDWINDOW ; ! Extended window styles : WS_EX_DLGMODALFRAME HEX: 00000001 ; inline : WS_EX_NOPARENTNOTIFY HEX: 00000004 ; inline : WS_EX_TOPMOST HEX: 00000008 ; inline : WS_EX_ACCEPTFILES HEX: 00000010 ; inline : WS_EX_TRANSPARENT HEX: 00000020 ; inline : WS_EX_MDICHILD HEX: 00000040 ; inline : WS_EX_TOOLWINDOW HEX: 00000080 ; inline : WS_EX_WINDOWEDGE HEX: 00000100 ; inline : WS_EX_CLIENTEDGE HEX: 00000200 ; inline : WS_EX_CONTEXTHELP HEX: 00000400 ; inline : WS_EX_RIGHT HEX: 00001000 ; inline : WS_EX_LEFT HEX: 00000000 ; inline : WS_EX_RTLREADING HEX: 00002000 ; inline : WS_EX_LTRREADING HEX: 00000000 ; inline : WS_EX_LEFTSCROLLBAR HEX: 00004000 ; inline : WS_EX_RIGHTSCROLLBAR HEX: 00000000 ; inline : WS_EX_CONTROLPARENT HEX: 00010000 ; inline : WS_EX_STATICEDGE HEX: 00020000 ; inline : WS_EX_APPWINDOW HEX: 00040000 ; inline : WS_EX_OVERLAPPEDWINDOW WS_EX_WINDOWEDGE WS_EX_CLIENTEDGE bitor ; inline : WS_EX_PALETTEWINDOW WS_EX_WINDOWEDGE WS_EX_TOOLWINDOW bitor WS_EX_TOPMOST bitor ; inline : CS_VREDRAW HEX: 0001 ; : CS_HREDRAW HEX: 0002 ; : CS_DBLCLKS HEX: 0008 ; : CS_OWNDC HEX: 0020 ; : CS_CLASSDC HEX: 0040 ; : CS_PARENTDC HEX: 0080 ; : CS_NOCLOSE HEX: 0200 ; : CS_SAVEBITS HEX: 0800 ; : CS_BYTEALIGNCLIENT HEX: 1000 ; : CS_BYTEALIGNWINDOW HEX: 2000 ; : CS_GLOBALCLASS HEX: 4000 ; : COLOR_SCROLLBAR 0 ; : COLOR_BACKGROUND 1 ; : COLOR_ACTIVECAPTION 2 ; : COLOR_INACTIVECAPTION 3 ; : COLOR_MENU 4 ; : COLOR_WINDOW 5 ; : COLOR_WINDOWFRAME 6 ; : COLOR_MENUTEXT 7 ; : COLOR_WINDOWTEXT 8 ; : COLOR_CAPTIONTEXT 9 ; : COLOR_ACTIVEBORDER 10 ; : COLOR_INACTIVEBORDER 11 ; : COLOR_APPWORKSPACE 12 ; : COLOR_HIGHLIGHT 13 ; : COLOR_HIGHLIGHTTEXT 14 ; : COLOR_BTNFACE 15 ; : COLOR_BTNSHADOW 16 ; : COLOR_GRAYTEXT 17 ; : COLOR_BTNTEXT 18 ; : COLOR_INACTIVECAPTIONTEXT 19 ; : COLOR_BTNHIGHLIGHT 20 ; : IDI_APPLICATION 32512 ; : IDI_HAND 32513 ; : IDI_QUESTION 32514 ; : IDI_EXCLAMATION 32515 ; : IDI_ASTERISK 32516 ; : IDI_WINLOGO 32517 ; ! ShowWindow() Commands : SW_HIDE 0 ; : SW_SHOWNORMAL 1 ; : SW_NORMAL 1 ; : SW_SHOWMINIMIZED 2 ; : SW_SHOWMAXIMIZED 3 ; : SW_MAXIMIZE 3 ; : SW_SHOWNOACTIVATE 4 ; : SW_SHOW 5 ; : SW_MINIMIZE 6 ; : SW_SHOWMINNOACTIVE 7 ; : SW_SHOWNA 8 ; : SW_RESTORE 9 ; : SW_SHOWDEFAULT 10 ; : SW_FORCEMINIMIZE 11 ; : SW_MAX 11 ; ! PeekMessage : PM_NOREMOVE 0 ; : PM_REMOVE 1 ; : PM_NOYIELD 2 ; ! : PM_QS_INPUT (QS_INPUT << 16) ; ! : PM_QS_POSTMESSAGE ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16) ; ! : PM_QS_PAINT (QS_PAINT << 16) ; ! : PM_QS_SENDMESSAGE (QS_SENDMESSAGE << 16) ; ! ! Standard Cursor IDs ! : IDC_ARROW 32512 ; : IDC_IBEAM 32513 ; : IDC_WAIT 32514 ; : IDC_CROSS 32515 ; : IDC_UPARROW 32516 ; : IDC_SIZE 32640 ; ! OBSOLETE: use IDC_SIZEALL : IDC_ICON 32641 ; ! OBSOLETE: use IDC_ARROW : IDC_SIZENWSE 32642 ; : IDC_SIZENESW 32643 ; : IDC_SIZEWE 32644 ; : IDC_SIZENS 32645 ; : IDC_SIZEALL 32646 ; : IDC_NO 32648 ; ! not in win3.1 : IDC_HAND 32649 ; : IDC_APPSTARTING 32650 ; ! not in win3.1 : IDC_HELP 32651 ; ! Predefined Clipboard Formats : CF_TEXT 1 ; inline : CF_BITMAP 2 ; inline : CF_METAFILEPICT 3 ; inline : CF_SYLK 4 ; inline : CF_DIF 5 ; inline : CF_TIFF 6 ; inline : CF_OEMTEXT 7 ; inline : CF_DIB 8 ; inline : CF_PALETTE 9 ; inline : CF_PENDATA 10 ; inline : CF_RIFF 11 ; inline : CF_WAVE 12 ; inline : CF_UNICODETEXT 13 ; inline : CF_ENHMETAFILE 14 ; inline : CF_HDROP 15 ; inline : CF_LOCALE 16 ; inline : CF_DIBV5 17 ; inline : CF_MAX 18 ; inline : CF_OWNERDISPLAY HEX: 0080 ; inline : CF_DSPTEXT HEX: 0081 ; inline : CF_DSPBITMAP HEX: 0082 ; inline : CF_DSPMETAFILEPICT HEX: 0083 ; inline : CF_DSPENHMETAFILE HEX: 008E ; inline ! "Private" formats don't get GlobalFree()'d : CF_PRIVATEFIRST HEX: 200 ; inline : CF_PRIVATELAST HEX: 2FF ; inline ! "GDIOBJ" formats do get DeleteObject()'d : CF_GDIOBJFIRST HEX: 300 ; inline : CF_GDIOBJLAST HEX: 3FF ; inline : WM_NULL 0 ; inline : WM_CREATE 1 ; inline : WM_DESTROY 2 ; inline : WM_MOVE 3 ; inline : WM_SIZE 5 ; inline : WM_ACTIVATE 6 ; inline ! Virtual Keys, Standard Set : VK_LBUTTON HEX: 01 ; inline : VK_RBUTTON HEX: 02 ; inline : VK_CANCEL HEX: 03 ; inline : VK_MBUTTON HEX: 04 ; inline ! NOT contiguous with L & RBUTTON : VK_XBUTTON1 HEX: 05 ; inline ! NOT contiguous with L & RBUTTON : VK_XBUTTON2 HEX: 06 ; inline ! NOT contiguous with L & RBUTTON ! 0x07 : unassigned : VK_BACK HEX: 08 ; inline : VK_TAB HEX: 09 ; inline ! 0x0A - 0x0B : reserved : VK_CLEAR HEX: 0C ; inline : VK_RETURN HEX: 0D ; inline : VK_SHIFT HEX: 10 ; inline : VK_CONTROL HEX: 11 ; inline : VK_MENU HEX: 12 ; inline : VK_PAUSE HEX: 13 ; inline : VK_CAPITAL HEX: 14 ; inline : VK_KANA HEX: 15 ; inline : VK_HANGEUL HEX: 15 ; inline ! old name - here for compatibility : VK_HANGUL HEX: 15 ; inline : VK_JUNJA HEX: 17 ; inline : VK_FINAL HEX: 18 ; inline : VK_HANJA HEX: 19 ; inline : VK_KANJI HEX: 19 ; inline : VK_ESCAPE HEX: 1B ; inline : VK_CONVERT HEX: 1C ; inline : VK_NONCONVERT HEX: 1D ; inline : VK_ACCEPT HEX: 1E ; inline : VK_MODECHANGE HEX: 1F ; inline : VK_SPACE HEX: 20 ; inline : VK_PRIOR HEX: 21 ; inline : VK_NEXT HEX: 22 ; inline : VK_END HEX: 23 ; inline : VK_HOME HEX: 24 ; inline : VK_LEFT HEX: 25 ; inline : VK_UP HEX: 26 ; inline : VK_RIGHT HEX: 27 ; inline : VK_DOWN HEX: 28 ; inline : VK_SELECT HEX: 29 ; inline : VK_PRINT HEX: 2A ; inline : VK_EXECUTE HEX: 2B ; inline : VK_SNAPSHOT HEX: 2C ; inline : VK_INSERT HEX: 2D ; inline : VK_DELETE HEX: 2E ; inline : VK_HELP HEX: 2F ; inline ! VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39) ! 0x40 : unassigned ! VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A) : VK_LWIN HEX: 5B ; inline : VK_RWIN HEX: 5C ; inline : VK_APPS HEX: 5D ; inline ! 0x5E : reserved : VK_SLEEP HEX: 5F ; inline : VK_NUMPAD0 HEX: 60 ; inline : VK_NUMPAD1 HEX: 61 ; inline : VK_NUMPAD2 HEX: 62 ; inline : VK_NUMPAD3 HEX: 63 ; inline : VK_NUMPAD4 HEX: 64 ; inline : VK_NUMPAD5 HEX: 65 ; inline : VK_NUMPAD6 HEX: 66 ; inline : VK_NUMPAD7 HEX: 67 ; inline : VK_NUMPAD8 HEX: 68 ; inline : VK_NUMPAD9 HEX: 69 ; inline : VK_MULTIPLY HEX: 6A ; inline : VK_ADD HEX: 6B ; inline : VK_SEPARATOR HEX: 6C ; inline : VK_SUBTRACT HEX: 6D ; inline : VK_DECIMAL HEX: 6E ; inline : VK_DIVIDE HEX: 6F ; inline : VK_F1 HEX: 70 ; inline : VK_F2 HEX: 71 ; inline : VK_F3 HEX: 72 ; inline : VK_F4 HEX: 73 ; inline : VK_F5 HEX: 74 ; inline : VK_F6 HEX: 75 ; inline : VK_F7 HEX: 76 ; inline : VK_F8 HEX: 77 ; inline : VK_F9 HEX: 78 ; inline : VK_F10 HEX: 79 ; inline : VK_F11 HEX: 7A ; inline : VK_F12 HEX: 7B ; inline : VK_F13 HEX: 7C ; inline : VK_F14 HEX: 7D ; inline : VK_F15 HEX: 7E ; inline : VK_F16 HEX: 7F ; inline : VK_F17 HEX: 80 ; inline : VK_F18 HEX: 81 ; inline : VK_F19 HEX: 82 ; inline : VK_F20 HEX: 83 ; inline : VK_F21 HEX: 84 ; inline : VK_F22 HEX: 85 ; inline : VK_F23 HEX: 86 ; inline : VK_F24 HEX: 87 ; inline ! 0x88 - 0x8F : unassigned : VK_NUMLOCK HEX: 90 ; inline : VK_SCROLL HEX: 91 ; inline ! NEC PC-9800 kbd definitions : VK_OEM_NEC_EQUAL HEX: 92 ; inline ! '=' key on numpad ! Fujitsu/OASYS kbd definitions : VK_OEM_FJ_JISHO HEX: 92 ; inline ! 'Dictionary' key : VK_OEM_FJ_MASSHOU HEX: 93 ; inline ! 'Unregister word' key : VK_OEM_FJ_TOUROKU HEX: 94 ; inline ! 'Register word' key : VK_OEM_FJ_LOYA HEX: 95 ; inline ! 'Left OYAYUBI' key : VK_OEM_FJ_ROYA HEX: 96 ; inline ! 'Right OYAYUBI' key ! 0x97 - 0x9F : unassigned ! VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys. ! Used only as parameters to GetAsyncKeyState() and GetKeyState(). ! No other API or message will distinguish left and right keys in this way. : VK_LSHIFT HEX: A0 ; inline : VK_RSHIFT HEX: A1 ; inline : VK_LCONTROL HEX: A2 ; inline : VK_RCONTROL HEX: A3 ; inline : VK_LMENU HEX: A4 ; inline : VK_RMENU HEX: A5 ; inline : VK_BROWSER_BACK HEX: A6 ; inline : VK_BROWSER_FORWARD HEX: A7 ; inline : VK_BROWSER_REFRESH HEX: A8 ; inline : VK_BROWSER_STOP HEX: A9 ; inline : VK_BROWSER_SEARCH HEX: AA ; inline : VK_BROWSER_FAVORITES HEX: AB ; inline : VK_BROWSER_HOME HEX: AC ; inline : VK_VOLUME_MUTE HEX: AD ; inline : VK_VOLUME_DOWN HEX: AE ; inline : VK_VOLUME_UP HEX: AF ; inline : VK_MEDIA_NEXT_TRACK HEX: B0 ; inline : VK_MEDIA_PREV_TRACK HEX: B1 ; inline : VK_MEDIA_STOP HEX: B2 ; inline : VK_MEDIA_PLAY_PAUSE HEX: B3 ; inline : VK_LAUNCH_MAIL HEX: B4 ; inline : VK_LAUNCH_MEDIA_SELECT HEX: B5 ; inline : VK_LAUNCH_APP1 HEX: B6 ; inline : VK_LAUNCH_APP2 HEX: B7 ; inline ! 0xB8 - 0xB9 : reserved : VK_OEM_1 HEX: BA ; inline ! ';:' for US : VK_OEM_PLUS HEX: BB ; inline ! '+' any country : VK_OEM_COMMA HEX: BC ; inline ! ',' any country : VK_OEM_MINUS HEX: BD ; inline ! '-' any country : VK_OEM_PERIOD HEX: BE ; inline ! '.' any country : VK_OEM_2 HEX: BF ; inline ! '/?' for US : VK_OEM_3 HEX: C0 ; inline ! '`~' for US ! 0xC1 - 0xD7 : reserved ! 0xD8 - 0xDA : unassigned : VK_OEM_4 HEX: DB ; inline ! '[{' for US : VK_OEM_5 HEX: DC ; inline ! '\|' for US : VK_OEM_6 HEX: DD ; inline ! ']}' for US : VK_OEM_7 HEX: DE ; inline ! ''"' for US : VK_OEM_8 HEX: DF ; inline ! 0xE0 : reserved ! Various extended or enhanced keyboards : VK_OEM_AX HEX: E1 ; inline ! 'AX' key on Japanese AX kbd : VK_OEM_102 HEX: E2 ; inline ! "<>" or "\|" on RT 102-key kbd. : VK_ICO_HELP HEX: E3 ; inline ! Help key on ICO : VK_ICO_00 HEX: E4 ; inline ! 00 key on ICO : VK_PROCESSKEY HEX: E5 ; inline : VK_ICO_CLEAR HEX: E6 ; inline : VK_PACKET HEX: E7 ; inline ! 0xE8 : unassigned ! Nokia/Ericsson definitions : VK_OEM_RESET HEX: E9 ; inline : VK_OEM_JUMP HEX: EA ; inline : VK_OEM_PA1 HEX: EB ; inline : VK_OEM_PA2 HEX: EC ; inline : VK_OEM_PA3 HEX: ED ; inline : VK_OEM_WSCTRL HEX: EE ; inline : VK_OEM_CUSEL HEX: EF ; inline : VK_OEM_ATTN HEX: F0 ; inline : VK_OEM_FINISH HEX: F1 ; inline : VK_OEM_COPY HEX: F2 ; inline : VK_OEM_AUTO HEX: F3 ; inline : VK_OEM_ENLW HEX: F4 ; inline : VK_OEM_BACKTAB HEX: F5 ; inline : VK_ATTN HEX: F6 ; inline : VK_CRSEL HEX: F7 ; inline : VK_EXSEL HEX: F8 ; inline : VK_EREOF HEX: F9 ; inline : VK_PLAY HEX: FA ; inline : VK_ZOOM HEX: FB ; inline : VK_NONAME HEX: FC ; inline : VK_PA1 HEX: FD ; inline : VK_OEM_CLEAR HEX: FE ; inline ! 0xFF : reserved ! Key State Masks for Mouse Messages : MK_LBUTTON HEX: 0001 ; inline : MK_RBUTTON HEX: 0002 ; inline : MK_SHIFT HEX: 0004 ; inline : MK_CONTROL HEX: 0008 ; inline : MK_MBUTTON HEX: 0010 ; inline : MK_XBUTTON1 HEX: 0020 ; inline : MK_XBUTTON2 HEX: 0040 ; inline ! Some fields are not defined for win64 ! Window field offsets for GetWindowLong() ! TODO: win32 only!! windows? [ : GWL_WNDPROC -4 ; : GWL_HINSTANCE -6 ; : GWL_HWNDPARENT -8 ; : GWL_USERDATA -21 ; : GWL_ID -12 ; ] when : GWL_STYLE -16 ; : GWL_EXSTYLE -20 ; : GWLP_WNDPROC -4 ; : GWLP_HINSTANCE -6 ; : GWLP_HWNDPARENT -8 ; : GWLP_USERDATA -21 ; : GWLP_ID -12 ; ! Class field offsets for GetClassLong() ! TODO: win32 only! windows? [ : GCL_MENUNAME -8 ; : GCL_HBRBACKGROUND -10 ; : GCL_HCURSOR -12 ; : GCL_HICON -14 ; : GCL_HMODULE -16 ; : GCL_WNDPROC -24 ; : GCL_HICONSM -34 ; ] when : GCL_CBWNDEXTRA -18 ; : GCL_CBCLSEXTRA -20 ; : GCL_STYLE -26 ; : GCW_ATOM -32 ; : GCLP_MENUNAME -8 ; : GCLP_HBRBACKGROUND -10 ; : GCLP_HCURSOR -12 ; : GCLP_HICON -14 ; : GCLP_HMODULE -16 ; : GCLP_WNDPROC -24 ; : GCLP_HICONSM -34 ; : MB_ICONASTERISK HEX: 00000040 ; : MB_ICONEXCLAMATION HEX: 00000030 ; : MB_ICONHAND HEX: 00000010 ; : MB_ICONQUESTION HEX: 00000020 ; : MB_OK HEX: 00000000 ; : TME_HOVER 1 ; inline : TME_LEAVE 2 ; inline : TME_QUERY HEX: 40000000 ; inline : TME_CANCEL HEX: 80000000 ; inline : HOVER_DEFAULT HEX: ffffffff ; inline BEGIN-STRUCT: TRACKMOUSEEVENT FIELD: DWORD cbSize FIELD: DWORD dwFlags FIELD: HWND hwndTrack FIELD: DWORD dwHoverTime END-STRUCT TYPEDEF: TRACKMOUSEEVENT* LPTRACKMOUSEEVENT