summaryrefslogtreecommitdiff
path: root/init_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'init_windows.go')
-rw-r--r--init_windows.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/init_windows.go b/init_windows.go
index 9ccd5df..bfc7649 100644
--- a/init_windows.go
+++ b/init_windows.go
@@ -11,6 +11,7 @@ import (
var (
hInstance _HANDLE
nCmdShow int
+ gdiplusToken uintptr
)
// TODO is this trick documented in MSDN?
@@ -56,6 +57,26 @@ func getWinMainnCmdShow() {
}
}
+func initGDIPlus() (err error) {
+ var gdiplusInit struct {
+ GdiplusVersion uint32
+ DebugEventCallback uintptr
+ SuppressBackgroundThread int32 // originally BOOL
+ SuppressExternalCodecs int32 // originally BOOL
+ }
+
+ gdiplusInit.GdiplusVersion = 1 // required
+ // TODO suppress external codecs?
+ r1, _, err := gdiplus.NewProc("GdiplusStartup").Call(
+ uintptr(unsafe.Pointer(&gdiplusToken)),
+ uintptr(unsafe.Pointer(&gdiplusInit)),
+ uintptr(0)) // we use the GDI+ thread so no need for output info
+ if r1 != 0 { // failure
+ return fmt.Errorf("error initializing GDI+ (GDI+ error code %d; windows last error %v)", r1, err)
+ }
+ return nil
+}
+
func doWindowsInit() (err error) {
err = getWinMainhInstance()
if err != nil {
@@ -74,6 +95,14 @@ func doWindowsInit() (err error) {
if err != nil {
return fmt.Errorf("error initializing Common Controls (comctl32.dll): %v", err)
}
+ err = initGDIPlus()
+ if err != nil {
+ return fmt.Errorf("error initializing GDI+ (gdiplus.dll): %v", err)
+ }
// TODO others
return nil // all ready to go
}
+
+func doWindowsQuitStuff() {
+ gdiplus.NewProc("GdiplusShutdown").Call(gdiplusToken) // returns void according to MSDN
+}