diff options
| author | Pietro Gagliardi <[email protected]> | 2014-02-11 16:23:38 -0500 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-02-11 16:23:38 -0500 |
| commit | af22eea889d553c6ed05b4bbaec4fe37fd85f2ff (patch) | |
| tree | 6aee87c264175f8ce35b6ba3e794ee0f3f19a051 /winmain_windows.go | |
| parent | 9b19ee72457586e41da5788f802c6bc55ea7a84b (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.go | 46 |
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 } |
