Removed unmigrated/main_windows.go; that test program has long since been unneeded.
This commit is contained in:
parent
6c265dd54d
commit
eead01b176
|
@ -1,327 +0,0 @@
|
|||
// +build ignore
|
||||
|
||||
// 7 february 2014
|
||||
|
||||
package ui
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue