summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-02-11 13:06:12 -0500
committerPietro Gagliardi <[email protected]>2014-02-11 13:06:12 -0500
commit42229820d2a47594f68d92356f8e8a86133a29f5 (patch)
tree3cd5deef283b4540bae2f75c049a5e69d4e9db20 /main.go
parenta488e3ab36de1d6a329110fbaae44cd5747c854b (diff)
Added _windows.go extensions to all the files in preparation for the library writing.
Diffstat (limited to 'main.go')
-rw-r--r--main.go324
1 files changed, 0 insertions, 324 deletions
diff --git a/main.go b/main.go
deleted file mode 100644
index 93aa4a1..0000000
--- a/main.go
+++ /dev/null
@@ -1,324 +0,0 @@
-// 7 february 2014
-package main
-
-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 (
- IDC_BUTTON = 100 + iota
- IDC_VARCOMBO
- IDC_FIXCOMBO
- IDC_EDIT
- IDC_LIST
- IDC_LABEL
- IDC_CHECK
-)
-
-var varCombo, fixCombo, edit, list HWND
-
-func wndProc(hwnd HWND, msg uint32, wParam WPARAM, lParam LPARAM) LRESULT {
- switch msg {
- case WM_COMMAND:
- if wParam.LOWORD() == IDC_BUTTON {
- buttonclick := "neither clicked nor double clicked (somehow)"
- if wParam.HIWORD() == BN_CLICKED {
- buttonclick = "clicked"
- } else if wParam.HIWORD() == BN_DOUBLECLICKED {
- buttonclick = "double clicked"
- }
-
- varText, err := getText(varCombo)
- if err != nil {
- fatalf("error getting variable combo box text: %v", err)
- }
-
- fixTextWM, err := getText(fixCombo)
- if err != nil {
- fatalf("error getting fixed combo box text with WM_GETTEXT: %v", err)
- }
-
- fixTextIndex, err := SendMessage(fixCombo, CB_GETCURSEL, 0, 0)
- if err != nil {
- fatalf("error getting fixed combo box current selection: %v", err)
- }
- // TODO get text from index
-
- editText, err := getText(edit)
- if err != nil {
- fatalf("error getting edit field text: %v", err)
- }
-
- listIndex, err := SendMessage(list, LB_GETCURSEL, 0, 0)
- if err != nil {
- fatalf("error getting fixed list box current selection: %v", err)
- }
- // TODO get text from index
-
- checkState, err := IsDlgButtonChecked(hwnd, IDC_CHECK)
- if err != nil {
- fatalf("error getting checkbox check state: %v", err)
- }
-
- MessageBox(hwnd,
- fmt.Sprintf("button state: %s\n" +
- "variable combo box text: %s\n" +
- "fixed combo box text with WM_GETTEXT: %s\n" +
- "fixed combo box current index: %d\n" +
- "edit field text: %s\n" +
- "list box current index: %d\n" +
- "check box checked: %v\n",
- buttonclick, varText, fixTextWM, fixTextIndex, editText, listIndex, checkState == BST_CHECKED),
- "note",
- MB_OK)
- }
- return 0
- case WM_GETMINMAXINFO:
- mm := lParam.MINMAXINFO()
- mm.PtMinTrackSize.X = 320
- mm.PtMinTrackSize.Y = 240
- return 0
- case WM_SIZE:
- if wParam != SIZE_MINIMIZED {
- resize(hwnd)
- }
- return 0
- case WM_CLOSE:
- err := DestroyWindow(hwnd)
- if err != nil {
- fatalf("error destroying window: %v", err)
- }
- return 0
- case WM_DESTROY:
- err := PostQuitMessage(0)
- if err != nil {
- fatalf("error posting quit message: %v", err)
- }
- return 0
- default:
- return DefWindowProc(hwnd, msg, wParam, lParam)
- }
- fatalf("major bug: forgot a return on wndProc for message %d", msg)
- panic("unreachable")
-}
-
-func setFontAll(hwnd HWND, lParam LPARAM) (cont bool) {
- _, err := SendMessage(hwnd, WM_SETFONT, WPARAM(lParam), LPARAM(TRUE))
- if err != nil {
- fatalf("error setting window font: %v", err)
- }
- return true
-}
-
-func resize(hwnd HWND) {
- cr, err := GetClientRect(hwnd)
- if err != nil {
- fatalf("error getting window client rect: %v", err)
- }
- cr.Bottom -= 80 // Y position of listbox
- cr.Bottom -= 20 // amount of pixels to leave behind
- err = SetWindowPos(list,
- HWND_TOP,
- 20, 80, 100, int(cr.Bottom),
- 0)
- if err != nil {
- fatalf("error resizing listbox: %v", err)
- }
-}
-
-const className = "mainwin"
-
-func main() {
- 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)
- }
- font, err := getStandardWindowFont()
- if err != nil {
- fatalf("error getting standard window font: %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: wndProc,
- HInstance: hInstance,
- HIcon: icon,
- HCursor: cursor,
- HbrBackground: HBRUSH(COLOR_BTNFACE + 1),
- }
- _, err = RegisterClass(wc)
- if err != nil {
- fatalf("error registering window class: %v", err)
- }
-
- hwnd, err := CreateWindowEx(
- 0,
- className, "Main Window",
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, CW_USEDEFAULT, 320, 240,
- NULL, NULL, hInstance, NULL)
- if err != nil {
- fatalf("error creating window: %v", err)
- }
-
- const controlStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP
-
- _, err = CreateWindowEx(
- 0,
- "BUTTON", "Click Me",
- BS_PUSHBUTTON | controlStyle,
- 20, 20, 100, 20,
- hwnd, HMENU(IDC_BUTTON), hInstance, NULL)
- if err != nil {
- fatalf("error creating button: %v", err)
- }
-
- varCombo, err = CreateWindowEx(
- 0,
- "COMBOBOX", "",
- CBS_DROPDOWN | CBS_AUTOHSCROLL | controlStyle,
- 140, 20, 100, 20,
- hwnd, HMENU(IDC_VARCOMBO), hInstance, NULL)
- if err != nil {
- fatalf("error creating variable combo box: %v", err)
- }
- vcItems := []string{"a", "b", "c", "d"}
- for _, v := range vcItems {
- _, err := SendMessage(varCombo, CB_ADDSTRING, 0,
- LPARAMFromString(v))
- if err != nil {
- fatalf("error adding %q to variable combo box: %v", v, err)
- }
- }
-
- fixCombo, err = CreateWindowEx(
- 0,
- "COMBOBOX", "",
- CBS_DROPDOWNLIST | controlStyle,
- 140, 50, 100, 20,
- hwnd, HMENU(IDC_FIXCOMBO), hInstance, NULL)
- if err != nil {
- fatalf("error creating fixed combo box: %v", err)
- }
- fcItems := []string{"e", "f", "g", "h"}
- for _, v := range fcItems {
- _, err := SendMessage(fixCombo, CB_ADDSTRING, 0,
- LPARAMFromString(v))
- if err != nil {
- fatalf("error adding %q to fixed combo box: %v", v, err)
- }
- }
-
- edit, err = CreateWindowEx(
- 0,
- "EDIT", "",
- ES_AUTOHSCROLL | ES_NOHIDESEL | WS_BORDER | controlStyle,
- 20, 50, 100, 20,
- hwnd, HMENU(IDC_EDIT), hInstance, NULL)
- if err != nil {
- fatalf("error creating edit field: %v", err)
- }
-
- list, err = CreateWindowEx(
- 0,
- "LISTBOX", "",
- LBS_STANDARD | controlStyle,
- 20, 80, 100, 100,
- hwnd, HMENU(IDC_FIXCOMBO), hInstance, NULL)
- if err != nil {
- fatalf("error creating list box: %v", err)
- }
- lItems := []string{"i", "j", "k", "l"}
- for _, v := range lItems {
- _, err := SendMessage(list, LB_ADDSTRING, 0,
- LPARAMFromString(v))
- if err != nil {
- fatalf("error adding %q to list box: %v", v, err)
- }
- // TODO check actual return value as THAT indicates an error
- }
-
- _, err = CreateWindowEx(
- 0,
- "STATIC", "Label",
- SS_NOPREFIX | controlStyle,
- 140, 80, 100, 20,
- hwnd, HMENU(IDC_FIXCOMBO), hInstance, NULL)
- if err != nil {
- fatalf("error creating label: %v", err)
- }
-
- _, err = CreateWindowEx(
- 0,
- "BUTTON", "Checkbox",
- BS_AUTOCHECKBOX | controlStyle,
- 140, 110, 100, 20,
- hwnd, HMENU(IDC_CHECK), hInstance, NULL)
- if err != nil {
- fatalf("error creating checkbox: %v", err)
- }
-
- setFontAll(hwnd, LPARAM(font))
- err = EnumChildWindows(hwnd, setFontAll, LPARAM(font))
- if err != nil {
- fatalf("error setting font on controls: %v", err)
- }
- resize(hwnd)
-
- _, 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)
- }
- }
-}
-