Migrated init_windows.go to C.

This commit is contained in:
Pietro Gagliardi 2014-07-17 22:33:03 -04:00
parent 7e40e9fe28
commit 2c025a97ef
4 changed files with 51 additions and 60 deletions

39
redo/init_windows.c Normal file
View File

@ -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;
}

View File

@ -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
}

View File

@ -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)

View File

@ -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 **);