diff options
Diffstat (limited to 'unmigrated/messages_windows.go')
| -rw-r--r-- | unmigrated/messages_windows.go | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/unmigrated/messages_windows.go b/unmigrated/messages_windows.go new file mode 100644 index 0000000..e74b9fa --- /dev/null +++ b/unmigrated/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 +} |
