summaryrefslogtreecommitdiff
path: root/messages.go
diff options
context:
space:
mode:
Diffstat (limited to 'messages.go')
-rw-r--r--messages.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/messages.go b/messages.go
new file mode 100644
index 0000000..aa01a7e
--- /dev/null
+++ b/messages.go
@@ -0,0 +1,49 @@
+// 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
+}