diff --git a/redo/init_windows.c b/redo/init_windows.c new file mode 100644 index 0000000..ad3124c --- /dev/null +++ b/redo/init_windows.c @@ -0,0 +1,39 @@ +/* 17 july 2014 */ + +#include "winapi_windows.h" + +HINSTANCE hInstnace; +int nCmdShow; + +HICON hDefaultIcon; +HCURSOR hArrowCursor; + +DWORD initWindows(char **errmsg) +{ + STARTUPINFOW si; + + /* WinMain() parameters */ + hInstance = GetModuleHandleW(NULL); + if (hInstance == NULL) { + *errmsg = "error getting hInstance"; + return GetLastError(); + } + nCmdShow = SW_SHOWDEFAULT; + GetStartupInfoW(&si); + if ((si.dwFlags & STARTF_USESHOWWINDOW) != 0) + nCmdShow = si.wShowWindow; + + /* icons and cursors */ + hDefaultIcon = LoadIconW(NULL, IDI_APPLICATION); + if (hDefaultIcon == NULL) { + *errmsg = "error loading default icon"; + return GetLastError(); + } + hDefaultCursor = LoadCursorW(NULL, IDC_ARROW); + if (hArrowCursor == NULL) { + *errmsg = "error loading arrow (default) cursor"; + return GetLastError(); + } + + return 0; +} diff --git a/redo/init_windows.go b/redo/init_windows.go deleted file mode 100644 index 1ce0e65..0000000 --- a/redo/init_windows.go +++ /dev/null @@ -1,58 +0,0 @@ -// 11 july 2014 - -package ui - -import ( - "fmt" -) - -var ( - hInstance uintptr - nCmdShow int - - hDefaultIcon uintptr - hArrowCursor uintptr -) - -func getWinMainParams() (err error) { - hInstance, err = f_GetModuleHandleW(nil) - if hInstance == 0 { - return fmt.Errorf("error getting hInstance: %v", err) - } - - var info s_STARTUPINFOW - - f_GetStartupInfoW(&info) - if info.dwFlags & c_STARTF_USESHOWWINDOW != 0 { - nCmdShow = int(info.wShowWindow) - } else { - nCmdShow = c_SW_SHOWDEFAULT - } - - return nil -} - -// TODO move to common_windows.go -var hNULL uintptr = 0 - -func loadIconsCursors() (err error) { - hDefaultIcon, err = f_LoadIconW(hNULL, c_IDI_APPLICATION) - if hDefaultIcon == hNULL { - return fmt.Errorf("error loading default icon: %v", err) - } - hArrowCursor, err = f_LoadCursorW(hNULL, c_IDC_ARROW) - if hArrowCursor == hNULL { - return fmt.Errorf("error loading arrow (default) cursor: %v", err) - } - return nil -} - -func initWindows() error { - if err := getWinMainParams(); err != nil { - return fmt.Errorf("error getting WinMain() parameters: %v", err) - } - if err := loadIconsCursors(); err != nil { - return fmt.Errorf("error loading standard/default icons and cursors: %v", err) - } - return nil -} diff --git a/redo/uitask_windows.go b/redo/uitask_windows.go index 69d6906..ccb3fdb 100644 --- a/redo/uitask_windows.go +++ b/redo/uitask_windows.go @@ -15,8 +15,11 @@ import "C" var msgwin C.HWND func uiinit() error { - if err := initWindows(); err != nil { - return fmt.Errorf("error initializing package ui on Windows: %v", err) + var errmsg *C.char + + errcode := C.initWindows(&errmsg) + if errcode != 0 || errmsg != nil { + return fmt.Errorf("error initializing package ui on Windows: %s: %v", C.GoString(errmsg), syscall.Errno(errcode)) } if err := initCommonControls(); err != nil { return fmt.Errorf("error initializing comctl32.dll version 6: %v", err) diff --git a/redo/winapi_windows.h b/redo/winapi_windows.h index ea3c745..e99cf86 100644 --- a/redo/winapi_windows.h +++ b/redo/winapi_windows.h @@ -38,3 +38,10 @@ extern HWND newWidget(LPCWSTR, DWORD, DWORD); extern void controlSetParent(HWND, HWND); extern LRESULT forwardCommand(HWND, UINT, WPARAM, LPARAM); extern void setButtonSubclass(HWND, void *); + +/* init_windows.c */ +extern HINSTANCE hInstnace; +extern int nCmdShow; +extern HICON hDefaultIcon; +extern HCURSOR hArrowCursor; +extern DWORD initWindows(char **);