// 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 wingui 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))) }