summaryrefslogtreecommitdiff
path: root/messages_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'messages_windows.go')
-rw-r--r--messages_windows.go72
1 files changed, 72 insertions, 0 deletions
diff --git a/messages_windows.go b/messages_windows.go
new file mode 100644
index 0000000..e74b9fa
--- /dev/null
+++ b/messages_windows.go
@@ -0,0 +1,72 @@
+// 9 february 2014
+package main
+
+import (
+// "syscall"
+ "unsafe"
+)
+
+// SendMessage constants.
+const (
+ HWND_BROADCAST = HWND(0xFFFF)
+)
+
+type MSG struct {
+ Hwnd HWND
+ Message uint32
+ WParam WPARAM
+ LParam LPARAM
+ Time uint32
+ Pt POINT
+}
+
+var (
+ dispatchMessage = user32.NewProc("DispatchMessageW")
+ getMessage = user32.NewProc("GetMessageW")
+ postQuitMessage = user32.NewProc("PostQuitMessage")
+ sendMessage = user32.NewProc("SendMessageW")
+ 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 PostQuitMessage(nExitCode int) (err error) {
+ postQuitMessage.Call(uintptr(nExitCode))
+ return nil
+}
+
+// TODO handle errors
+func SendMessage(hWnd HWND, Msg uint32, wParam WPARAM, lParam LPARAM) (result LRESULT, err error) {
+ r1, _, _ := sendMessage.Call(
+ uintptr(hWnd),
+ uintptr(Msg),
+ uintptr(wParam),
+ uintptr(lParam))
+ return LRESULT(r1), nil
+}
+
+// TODO handle errors
+func TranslateMessage(lpMsg *MSG) (translated bool, err error) {
+ r1, _, _ := translateMessage.Call(uintptr(unsafe.Pointer(lpMsg)))
+ return r1 != 0, nil
+}