summaryrefslogtreecommitdiff
path: root/winmain_windows.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-02-11 16:23:38 -0500
committerPietro Gagliardi <[email protected]>2014-02-11 16:23:38 -0500
commitaf22eea889d553c6ed05b4bbaec4fe37fd85f2ff (patch)
tree6aee87c264175f8ce35b6ba3e794ee0f3f19a051 /winmain_windows.go
parent9b19ee72457586e41da5788f802c6bc55ea7a84b (diff)
Set up initialization on Windows (1/2) and fixed a leftover error in sysdata_windows.go.
Diffstat (limited to 'winmain_windows.go')
-rw-r--r--winmain_windows.go46
1 files changed, 32 insertions, 14 deletions
diff --git a/winmain_windows.go b/winmain_windows.go
index b79ad81..bea6516 100644
--- a/winmain_windows.go
+++ b/winmain_windows.go
@@ -2,28 +2,30 @@
package main
import (
+ "fmt"
// "syscall"
"unsafe"
)
-// this provides the hInstance and nCmdShow that are normally passed to WinMain()
-
const (
- STARTF_USESHOWWINDOW = 0x00000001
+ windowclass = "gouiwndclass"
)
var (
- getModuleHandle = kernel32.NewProc("GetModuleHandleW")
- getStartupInfo = kernel32.NewProc("GetStartupInfoW")
+ hInstance HANDLE
+ nCmdShow int
+ // TODO font
+ // TODO common window class
)
// TODO is this trick documented in MSDN?
-func getWinMainhInstance() (hInstance HANDLE, err error) {
- r1, _, err := getModuleHandle.Call(uintptr(NULL))
- if r1 == 0 {
- return NULL, err
+func getWinMainhInstance() (err error) {
+ r1, _, err := kernel32.NewProc("GetModuleHandleW").Call(uintptr(NULL))
+ if r1 == 0 { // failure
+ return err
}
- return HANDLE(r1), nil
+ hInstance = HANDLE(r1)
+ return nil
}
// TODO this is what MinGW-w64's crt (svn revision xxx) does; is it best? is any of this documented anywhere on MSDN?
@@ -49,11 +51,27 @@ func getWinMainnCmdShow() (nCmdShow int, err error) {
hStdOutput HANDLE
hStdError HANDLE
}
+ const _STARTF_USESHOWWINDOW = 0x00000001
// does not fail according to MSDN
- getStartupInfo.Call(uintptr(unsafe.Pointer(&info)))
- if info.dwFlags & STARTF_USESHOWWINDOW != 0 {
- return int(info.wShowWindow), nil
+ kernel32.NewProc("GetStartupInfoW").Call(uintptr(unsafe.Pointer(&info)))
+ if info.dwFlags & _STARTF_USESHOWWINDOW != 0 {
+ nCmdShow = int(info.wShowWindow)
+ return nil
+ }
+ nCmdShow = _SW_SHOWDEFAULT
+ return nil
+}
+
+func doWindowsInit() (err error) {
+ err = getWinMainhInstance()
+ if err != nil {
+ return fmt.Errorf("error getting WinMain hInstance: %v", err)
+ }
+ err = getWinMainnCmdShow()
+ if err != nil {
+ return fmt.Errorf("error getting WinMain nCmdShow: %v", err)
}
- return SW_SHOWDEFAULT, nil
+ // TODO others
+ return nil // all ready to go
}