summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common.go3
-rw-r--r--listboxes.go91
-rw-r--r--main.go33
3 files changed, 123 insertions, 4 deletions
diff --git a/common.go b/common.go
index a51583d..51ebf6f 100644
--- a/common.go
+++ b/common.go
@@ -6,7 +6,8 @@ import (
"unsafe"
)
-// TODO filter out commctrl.h stuff because the combobox stuff has values that differ between windows versions and bleh
+// TODO filter out commctrl.h stuff because the combobox and listbox stuff has values that differ between windows versions and bleh
+// either that or switch to ComboBoxEx and ListView because they might not have that problem???
var (
user32 = syscall.NewLazyDLL("user32.dll")
diff --git a/listboxes.go b/listboxes.go
new file mode 100644
index 0000000..294cd96
--- /dev/null
+++ b/listboxes.go
@@ -0,0 +1,91 @@
+// 10 february 2014
+package main
+
+import (
+// "syscall"
+// "unsafe"
+)
+
+// Listbox styles.
+const (
+ // from winuser.h
+ LBS_NOTIFY = 0x0001
+ LBS_SORT = 0x0002
+ LBS_NOREDRAW = 0x0004
+ LBS_MULTIPLESEL = 0x0008
+ LBS_OWNERDRAWFIXED = 0x0010
+ LBS_OWNERDRAWVARIABLE = 0x0020
+ LBS_HASSTRINGS = 0x0040
+ LBS_USETABSTOPS = 0x0080
+ LBS_NOINTEGRALHEIGHT = 0x0100
+ LBS_MULTICOLUMN = 0x0200
+ LBS_WANTKEYBOARDINPUT = 0x0400
+ LBS_EXTENDEDSEL = 0x0800
+ LBS_DISABLENOSCROLL = 0x1000
+ LBS_NODATA = 0x2000
+ LBS_NOSEL = 0x4000
+ LBS_COMBOBOX = 0x8000
+ LBS_STANDARD = (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)
+)
+
+// Listbox messages.
+// TODO filter out messages not provided in windows 2000
+const (
+ // from winuser.h
+ LB_ADDSTRING = 0x0180
+ LB_INSERTSTRING = 0x0181
+ LB_DELETESTRING = 0x0182
+ LB_SELITEMRANGEEX = 0x0183
+ LB_RESETCONTENT = 0x0184
+ LB_SETSEL = 0x0185
+ LB_SETCURSEL = 0x0186
+ LB_GETSEL = 0x0187
+ LB_GETCURSEL = 0x0188
+ LB_GETTEXT = 0x0189
+ LB_GETTEXTLEN = 0x018A
+ LB_GETCOUNT = 0x018B
+ LB_SELECTSTRING = 0x018C
+ LB_DIR = 0x018D
+ LB_GETTOPINDEX = 0x018E
+ LB_FINDSTRING = 0x018F
+ LB_GETSELCOUNT = 0x0190
+ LB_GETSELITEMS = 0x0191
+ LB_SETTABSTOPS = 0x0192
+ LB_GETHORIZONTALEXTENT = 0x0193
+ LB_SETHORIZONTALEXTENT = 0x0194
+ LB_SETCOLUMNWIDTH = 0x0195
+ LB_ADDFILE = 0x0196
+ LB_SETTOPINDEX = 0x0197
+ LB_GETITEMRECT = 0x0198
+ LB_GETITEMDATA = 0x0199
+ LB_SETITEMDATA = 0x019A
+ LB_SELITEMRANGE = 0x019B
+ LB_SETANCHORINDEX = 0x019C
+ LB_GETANCHORINDEX = 0x019D
+ LB_SETCARETINDEX = 0x019E
+ LB_GETCARETINDEX = 0x019F
+ LB_SETITEMHEIGHT = 0x01A0
+ LB_GETITEMHEIGHT = 0x01A1
+ LB_FINDSTRINGEXACT = 0x01A2
+ LB_SETLOCALE = 0x01A5
+ LB_GETLOCALE = 0x01A6
+ LB_SETCOUNT = 0x01A7
+ LB_INITSTORAGE = 0x01A8
+ LB_ITEMFROMPOINT = 0x01A9
+ LB_MULTIPLEADDSTRING = 0x01B1
+ LB_GETLISTBOXINFO = 0x01B2
+)
+
+// Listbox WM_COMMAND notifications and message returns.
+// TODO filter out notifications not provided in windows 2000
+const (
+ // from winuser.h
+ LB_OKAY = 0
+ LB_ERR = (-1) // TODO this will blow up the Go compiler if it's used
+ LBN_ERRSPACE = (-2) // TODO this will blow up the Go compiler if it's used
+ LBN_SELCHANGE = 1
+ LBN_DBLCLK = 2
+ LBN_SELCANCEL = 3
+ LBN_SETFOCUS = 4
+ LBN_KILLFOCUS = 5
+)
diff --git a/main.go b/main.go
index a5b68af..1e27088 100644
--- a/main.go
+++ b/main.go
@@ -24,9 +24,10 @@ const (
IDC_VARCOMBO
IDC_FIXCOMBO
IDC_EDIT
+ IDC_LIST
)
-var varCombo, fixCombo, edit HWND
+var varCombo, fixCombo, edit, list HWND
func wndProc(hwnd HWND, msg uint32, wParam WPARAM, lParam LPARAM) LRESULT {
switch msg {
@@ -60,13 +61,20 @@ func wndProc(hwnd HWND, msg uint32, wParam WPARAM, lParam LPARAM) LRESULT {
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
+
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",
- buttonclick, varText, fixTextWM, fixTextIndex, editText),
+ "edit field text: %s\n" +
+ "list box current index: %d\n",
+ buttonclick, varText, fixTextWM, fixTextIndex, editText, listIndex),
"note",
MB_OK)
}
@@ -194,6 +202,25 @@ func main() {
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 = ShowWindow(hwnd, nCmdShow)
if err != nil {
fatalf("error showing window: %v", err)