#ifndef LISTVIEW_H #define LISTVIEW_H #include #include struct Window; struct ListView { HWND hWnd; Window& parent; ListView(Window& parent, HMENU hMenu, DWORD dwStyle); /* Retrieve next matching list view item. */ bool FindNextItem(LVITEM* lvi, LPARAM lParam) noexcept; /* Naively calculate height appropriate for number of items. */ virtual int Height() noexcept; /* Update column widths on window size change (unimplemented * by default). */ virtual void ResizeColumns(int w); /* Enable/disable "modern" theme. */ virtual void UpdateTheme(bool bThemeActive); virtual LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); protected: WNDPROC m_proc0; }; inline bool ListView::FindNextItem(LVITEM* const lvi, const LPARAM lParam) noexcept { if ((lvi->iItem = ListView_GetNextItem(hWnd, lvi->iItem, lParam)) == -1) return false; return ListView_GetItem(hWnd, lvi); } #endif