andlabs-ui/messages.go

50 lines
1.1 KiB
Go
Raw Normal View History

// 9 february 2014
package main
import (
// "syscall"
"unsafe"
)
type MSG struct {
Hwnd HWND
Message uint32
WParam WPARAM
LParam LPARAM
Time uint32
Pt POINT
}
var (
dispatchMessage = user32.NewProc("DispatchMessageW")
getMessage = user32.NewProc("GetMessageW")
translateMessage = user32.NewProc("TranslateMessage")
)
// TODO handle errors
func DispatchMessage(lpmsg *MSG) (result LRESULT, err error) {
r1, _, _ := dispatchMessage.Call(uintptr(unsafe.Pointer(lpmsg)))
return LRESULT(r1), nil
}
var getMessageFail = -1 // because Go doesn't let me
func GetMessage(hWnd HWND, wMsgFilterMin uint32, wMsgFilterMax uint32) (lpMsg *MSG, quit bool, err error) {
lpMsg = new(MSG)
r1, _, err := getMessage.Call(
uintptr(unsafe.Pointer(lpMsg)),
uintptr(hWnd),
uintptr(wMsgFilterMin),
uintptr(wMsgFilterMax))
if r1 == uintptr(getMessageFail) { // failure
return nil, false, err
}
return lpMsg, r1 == 0, nil
}
// TODO handle errors
func TranslateMessage(lpMsg *MSG) (translated bool, err error) {
r1, _, _ := translateMessage.Call(uintptr(unsafe.Pointer(lpMsg)))
return r1 != 0, nil
}