summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--redo/init_windows.c39
-rw-r--r--redo/init_windows.go58
-rw-r--r--redo/uitask_windows.go7
-rw-r--r--redo/winapi_windows.h7
4 files changed, 51 insertions, 60 deletions
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 **);