diff --git a/wintable/new/header.h b/wintable/new/header.h index 47c13b2..c89b506 100644 --- a/wintable/new/header.h +++ b/wintable/new/header.h @@ -55,6 +55,19 @@ static void headerAddColumn(struct table *t, WCHAR *name) static void updateTableWidth(struct table *t) { + HDITEMW item; + intptr_t i; + + t->width = 0; + // TODO count dividers? + for (i = 0; i < t->nColumns; i++) { + ZeroMemory(&item, sizeof (HDITEMW)); + item.mask = HDI_WIDTH; + if (SendMessageW(t->header, HDM_GETITEM, (WPARAM) i, (LPARAM) (&item)) == FALSE) + panic("error getting Table column width for updateTableWidth()"); + t->width += item.cxy; + } + // TODO replace this with a call to hscrollby(t, 0) recomputeHScroll(t); } diff --git a/wintable/new/hscroll.h b/wintable/new/hscroll.h index 061cd7b..84ddc3b 100644 --- a/wintable/new/hscroll.h +++ b/wintable/new/hscroll.h @@ -18,19 +18,8 @@ static void hscroll(struct table *t, WPARAM wParam, LPARAM lParam) static void recomputeHScroll(struct table *t) { SCROLLINFO si; - HDITEMW item; - intptr_t i, width; RECT r; - width = 0; - // TODO count dividers? - for (i = 0; i < t->nColumns; i++) { - ZeroMemory(&item, sizeof (HDITEMW)); - item.mask = HDI_WIDTH; - if (SendMessageW(t->header, HDM_GETITEM, (WPARAM) i, (LPARAM) (&item)) == FALSE) - panic("error getting Table column width for recomputeHScroll()"); - width += item.cxy; - } if (GetClientRect(t->hwnd, &r) == 0) panic("error getting Table client rect for recomputeHScroll()"); ZeroMemory(&si, sizeof (SCROLLINFO)); @@ -38,7 +27,7 @@ static void recomputeHScroll(struct table *t) si.fMask = SIF_PAGE | SIF_RANGE; si.nPage = r.right - r.left; si.nMin = 0; - si.nMax = width - 1; // endpoint inclusive + si.nMax = t->width - 1; // endpoint inclusive SetScrollInfo(t->hwnd, SB_HORZ, &si, TRUE); // TODO what happens if the above call renders the current scroll position moot? } diff --git a/wintable/new/main.c b/wintable/new/main.c index 2a0ccba..79b00ae 100644 --- a/wintable/new/main.c +++ b/wintable/new/main.c @@ -52,6 +52,7 @@ struct table { HFONT font; intptr_t nColumns; int *columnTypes; + intptr_t width; }; #include "util.h"