summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go93
1 files changed, 88 insertions, 5 deletions
diff --git a/main.go b/main.go
index c8162ef..b16378e 100644
--- a/main.go
+++ b/main.go
@@ -1,12 +1,95 @@
// 7 february 2014
package main
-import "fmt"
+import (
+ "fmt"
+ "os"
+ "runtime"
+)
+
+func fatalf(format string, args ...interface{}) {
+ s := fmt.Sprintf(format, args...)
+ _, err := MessageBox(NULL,
+ "An internal error has occured:\n" + s,
+ os.Args[0],
+ MB_OK | MB_ICONERROR)
+ if err == nil {
+ os.Exit(1)
+ }
+ panic(fmt.Sprintf("error trying to warn user of internal error: %v\ninternal error:\n%s", err, s))
+}
+
+const className = "mainwin"
func main() {
- fmt.Println(MessageBox(NULL,
- "hello, world",
- "hello",
- 0))
+ runtime.LockOSThread()
+
+ hInstance, err := getWinMainhInstance()
+ if err != nil {
+ fatalf("error getting WinMain hInstance: %v", err)
+ }
+ nCmdShow, err := getWinMainnCmdShow()
+ if err != nil {
+ fatalf("error getting WinMain nCmdShow: %v", err)
+ }
+
+ icon, err := LoadIcon_ResourceID(NULL, IDI_APPLICATION)
+ if err != nil {
+ fatalf("error getting window icon: %v", err)
+ }
+ cursor, err := LoadCursor_ResourceID(NULL, IDC_ARROW)
+ if err != nil {
+ fatalf("error getting window cursor: %v", err)
+ }
+
+ wc := &WNDCLASS{
+ LpszClassName: className,
+ LpfnWndProc: DefWindowProc,
+ HInstance: hInstance,
+ HIcon: icon,
+ HCursor: cursor,
+ HbrBackground: HBRUSH(COLOR_WINDOW + 1),
+ }
+ _, err = RegisterClass(wc)
+ if err != nil {
+ fatalf("error registering window class: %v", err)
+ }
+
+ hwnd, err := CreateWindowEx(
+ WS_EX_OVERLAPPEDWINDOW,
+ className, "Main Window",
+ WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT, CW_USEDEFAULT, 320, 240,
+ NULL, NULL, hInstance, NULL)
+ if err != nil {
+ fatalf("error creating window: %v", err)
+ }
+
+ _, err = ShowWindow(hwnd, nCmdShow)
+ if err != nil {
+ fatalf("error showing window: %v", err)
+ }
+ err = UpdateWindow(hwnd)
+ if err != nil {
+ fatalf("error updating window: %v", err)
+ }
+
+ for {
+ msg, done, err := GetMessage(NULL, 0, 0)
+ if err != nil {
+ fatalf("error getting message: %v", err)
+ }
+ if done {
+ break
+ }
+ _, err = TranslateMessage(msg)
+ if err != nil {
+ fatalf("error translating message: %v", err)
+ }
+ _, err = DispatchMessage(msg)
+ if err != nil {
+ fatalf("error dispatching message: %v", err)
+ }
+ }
}