Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- file: testwinapi.go
- go! winapi test using "go-winapi":
- http://github.com/lxn/go-winapi
- */
- // this package
- package main
- // package imports
- import (
- "fmt"
- "github.com/lxn/go-winapi"
- "os"
- "syscall"
- "unsafe"
- )
- // variables
- var (
- oldWndProc winapi.HWND
- )
- // constants
- const (
- winWidth int32 = 300
- winHeight int32 = 200
- SIZE_MAXIMIZED = 2
- )
- // string to int16(utf) helper function
- func _S(_srt string) *uint16 {
- return syscall.StringToUTF16Ptr(_srt)
- }
- // window procedure
- func WndProc(hwnd winapi.HWND, msg uint32, wparam uintptr, lparam uintptr) uintptr {
- switch msg {
- case winapi.WM_SIZE:
- if wparam == SIZE_MAXIMIZED {
- fmt.Println("Changed!")
- }
- }
- // call original procedure
- return winapi.CallWindowProc(uintptr(oldWndProc), hwnd, msg, wparam, lparam)
- }
- // main
- func main() {
- var message winapi.MSG
- var hwnd winapi.HWND
- var wproc uintptr
- // create an edit window
- hwnd = winapi.CreateWindowEx(
- winapi.WS_EX_CLIENTEDGE,
- _S("EDIT"),
- _S("test window"),
- winapi.WS_OVERLAPPEDWINDOW,
- (winapi.GetSystemMetrics(winapi.SM_CXSCREEN)-winWidth)>>1,
- (winapi.GetSystemMetrics(winapi.SM_CYSCREEN)-winHeight)>>1,
- winWidth,
- winHeight,
- 0,
- 0,
- winapi.GetModuleHandle(nil),
- unsafe.Pointer(nil))
- // create callback, set procedure, show window
- wproc = syscall.NewCallback(WndProc)
- oldWndProc = winapi.HWND(winapi.SetWindowLong(hwnd, winapi.GWL_WNDPROC, int32(wproc)))
- winapi.ShowWindow(hwnd, winapi.SW_SHOWDEFAULT)
- // dispatch message
- for {
- if winapi.GetMessage(&message, 0, 0, 0) == 0 {
- break
- }
- winapi.TranslateMessage(&message)
- winapi.DispatchMessage(&message)
- }
- // print handle and exit
- fmt.Println("hwnd =", hwnd)
- os.Exit(int(message.WParam))
- }
Add Comment
Please, Sign In to add comment