diff --git a/redo/table_windows.c b/redo/table_windows.c index 151fe06..319aaaa 100644 --- a/redo/table_windows.c +++ b/redo/table_windows.c @@ -55,3 +55,9 @@ void tableUpdate(HWND hwnd, int nItems) if (SendMessageW(hwnd, LVM_SETITEMCOUNT, (WPARAM) nItems, 0) == 0) xpanic("error setting number of items in Table", GetLastError()); } + +void tableAddExtendedStyles(HWND hwnd, LPARAM styles) +{ + /* the bits of WPARAM specify which bits of LPARAM to look for; having WPARAM == LPARAM ensures that only the bits we want to add are affected */ + SendMessageW(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, (WPARAM) styles, styles); +} diff --git a/redo/table_windows.go b/redo/table_windows.go index 6839be0..c3e0453 100644 --- a/redo/table_windows.go +++ b/redo/table_windows.go @@ -24,6 +24,9 @@ func finishNewTable(b *tablebase, ty reflect.Type) Table { tablebase: b, } C.setTableSubclass(t.hwnd, unsafe.Pointer(t)) + // LVS_EX_FULLROWSELECT gives us selection across the whole row, not just the leftmost column; this makes the list view work like on other platforms + // LVS_EX_SUBITEMIMAGES gives us images in subitems, which will be important when both images and checkboxes are added + C.tableAddExtendedStyles(t.hwnd, C.LVS_EX_FULLROWSELECT | C.LVS_EX_SUBITEMIMAGES) for i := 0; i < ty.NumField(); i++ { C.tableAppendColumn(t.hwnd, C.int(i), toUTF16(ty.Field(i).Name)) } diff --git a/redo/winapi_windows.h b/redo/winapi_windows.h index c8726e7..51bbe0e 100644 --- a/redo/winapi_windows.h +++ b/redo/winapi_windows.h @@ -92,5 +92,6 @@ extern LPCWSTR xWC_LISTVIEW; extern void setTableSubclass(HWND, void *); extern void tableAppendColumn(HWND, int, LPCWSTR); extern void tableUpdate(HWND, int); +extern void tableAddExtendedStyles(HWND, LPARAM); #endif