diff options
| author | Pietro Gagliardi <[email protected]> | 2014-02-09 14:59:37 -0500 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-02-09 14:59:37 -0500 |
| commit | 3482c9c541210dbf0e7bdd5dbf2c6372d5d55162 (patch) | |
| tree | 8d9595b9c9ce22ed823a1f696a24eb9820aaa100 /messages.go | |
| parent | ecc00bd1f5cb5d97387f762455c6c51afd0f2fae (diff) | |
Added the rest of the skeleton necessary for opening a simple window as well as the code to actually open one. Now for custom window procedures!
Diffstat (limited to 'messages.go')
| -rw-r--r-- | messages.go | 49 |
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 +} |
