| // Copyright 2011 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // +build windows |
| |
| package main |
| |
| import ( |
| "syscall" |
| "unsafe" |
| ) |
| |
| type Wndclassex struct { |
| Size uint32 |
| Style uint32 |
| WndProc uintptr |
| ClsExtra int32 |
| WndExtra int32 |
| Instance syscall.Handle |
| Icon syscall.Handle |
| Cursor syscall.Handle |
| Background syscall.Handle |
| MenuName *uint16 |
| ClassName *uint16 |
| IconSm syscall.Handle |
| } |
| |
| type Point struct { |
| X uintptr |
| Y uintptr |
| } |
| |
| type Msg struct { |
| Hwnd syscall.Handle |
| Message uint32 |
| Wparam uintptr |
| Lparam uintptr |
| Time uint32 |
| Pt Point |
| } |
| |
| const ( |
| // Window styles |
| WS_OVERLAPPED = 0 |
| WS_POPUP = 0x80000000 |
| WS_CHILD = 0x40000000 |
| WS_MINIMIZE = 0x20000000 |
| WS_VISIBLE = 0x10000000 |
| WS_DISABLED = 0x8000000 |
| WS_CLIPSIBLINGS = 0x4000000 |
| WS_CLIPCHILDREN = 0x2000000 |
| WS_MAXIMIZE = 0x1000000 |
| WS_CAPTION = WS_BORDER | WS_DLGFRAME |
| WS_BORDER = 0x800000 |
| WS_DLGFRAME = 0x400000 |
| WS_VSCROLL = 0x200000 |
| WS_HSCROLL = 0x100000 |
| WS_SYSMENU = 0x80000 |
| WS_THICKFRAME = 0x40000 |
| WS_GROUP = 0x20000 |
| WS_TABSTOP = 0x10000 |
| WS_MINIMIZEBOX = 0x20000 |
| WS_MAXIMIZEBOX = 0x10000 |
| WS_TILED = WS_OVERLAPPED |
| WS_ICONIC = WS_MINIMIZE |
| WS_SIZEBOX = WS_THICKFRAME |
| // Common Window Styles |
| WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX |
| WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW |
| WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU |
| WS_CHILDWINDOW = WS_CHILD |
| |
| WS_EX_CLIENTEDGE = 0x200 |
| |
| // Some windows messages |
| WM_CREATE = 1 |
| WM_DESTROY = 2 |
| WM_CLOSE = 16 |
| WM_COMMAND = 273 |
| |
| // Some button control styles |
| BS_DEFPUSHBUTTON = 1 |
| |
| // Some color constants |
| COLOR_WINDOW = 5 |
| COLOR_BTNFACE = 15 |
| |
| // Default window position |
| CW_USEDEFAULT = 0x80000000 - 0x100000000 |
| |
| // Show window default style |
| SW_SHOWDEFAULT = 10 |
| ) |
| |
| var ( |
| // Some globally known cursors |
| IDC_ARROW = MakeIntResource(32512) |
| IDC_IBEAM = MakeIntResource(32513) |
| IDC_WAIT = MakeIntResource(32514) |
| IDC_CROSS = MakeIntResource(32515) |
| |
| // Some globally known icons |
| IDI_APPLICATION = MakeIntResource(32512) |
| IDI_HAND = MakeIntResource(32513) |
| IDI_QUESTION = MakeIntResource(32514) |
| IDI_EXCLAMATION = MakeIntResource(32515) |
| IDI_ASTERISK = MakeIntResource(32516) |
| IDI_WINLOGO = MakeIntResource(32517) |
| IDI_WARNING = IDI_EXCLAMATION |
| IDI_ERROR = IDI_HAND |
| IDI_INFORMATION = IDI_ASTERISK |
| ) |
| |
| //sys GetModuleHandle(modname *uint16) (handle syscall.Handle, err error) = GetModuleHandleW |
| //sys RegisterClassEx(wndclass *Wndclassex) (atom uint16, err error) = user32.RegisterClassExW |
| //sys CreateWindowEx(exstyle uint32, classname *uint16, windowname *uint16, style uint32, x int32, y int32, width int32, height int32, wndparent syscall.Handle, menu syscall.Handle, instance syscall.Handle, param uintptr) (hwnd syscall.Handle, err error) = user32.CreateWindowExW |
| //sys DefWindowProc(hwnd syscall.Handle, msg uint32, wparam uintptr, lparam uintptr) (lresult uintptr) = user32.DefWindowProcW |
| //sys DestroyWindow(hwnd syscall.Handle) (err error) = user32.DestroyWindow |
| //sys PostQuitMessage(exitcode int32) = user32.PostQuitMessage |
| //sys ShowWindow(hwnd syscall.Handle, cmdshow int32) (wasvisible bool) = user32.ShowWindow |
| //sys UpdateWindow(hwnd syscall.Handle) (err error) = user32.UpdateWindow |
| //sys GetMessage(msg *Msg, hwnd syscall.Handle, MsgFilterMin uint32, MsgFilterMax uint32) (ret int32, err error) [failretval==-1] = user32.GetMessageW |
| //sys TranslateMessage(msg *Msg) (done bool) = user32.TranslateMessage |
| //sys DispatchMessage(msg *Msg) (ret int32) = user32.DispatchMessageW |
| //sys LoadIcon(instance syscall.Handle, iconname *uint16) (icon syscall.Handle, err error) = user32.LoadIconW |
| //sys LoadCursor(instance syscall.Handle, cursorname *uint16) (cursor syscall.Handle, err error) = user32.LoadCursorW |
| //sys SetCursor(cursor syscall.Handle) (precursor syscall.Handle, err error) = user32.SetCursor |
| //sys SendMessage(hwnd syscall.Handle, msg uint32, wparam uintptr, lparam uintptr) (lresult uintptr) = user32.SendMessageW |
| //sys PostMessage(hwnd syscall.Handle, msg uint32, wparam uintptr, lparam uintptr) (err error) = user32.PostMessageW |
| |
| func MakeIntResource(id uint16) *uint16 { |
| return (*uint16)(unsafe.Pointer(uintptr(id))) |
| } |