1 // Windows/Control/ListView.h
2 
3 #ifndef __WINDOWS_CONTROL_LISTVIEW_H
4 #define __WINDOWS_CONTROL_LISTVIEW_H
5 
6 #include "../Window.h"
7 
8 #include <commctrl.h>
9 
10 namespace NWindows {
11 namespace NControl {
12 
13 class CListView: public NWindows::CWindow
14 {
15 public:
16   bool CreateEx(DWORD exStyle, DWORD style,
17       int x, int y, int width, int height,
18       HWND parentWindow, HMENU idOrHMenu,
19       HINSTANCE instance, LPVOID createParam);
20 
SetUnicodeFormat()21   void SetUnicodeFormat()
22   {
23     #ifndef UNDER_CE
24     ListView_SetUnicodeFormat(_window, TRUE);
25     #endif
26   }
27 
DeleteAllItems()28   bool DeleteAllItems() { return BOOLToBool(ListView_DeleteAllItems(_window)); }
DeleteColumn(int columnIndex)29   bool DeleteColumn(int columnIndex) { return BOOLToBool(ListView_DeleteColumn(_window, columnIndex)); }
30 
InsertColumn(int columnIndex,const LVCOLUMN * columnInfo)31   int InsertColumn(int columnIndex, const LVCOLUMN *columnInfo) { return ListView_InsertColumn(_window, columnIndex, columnInfo); }
32   int InsertColumn(int columnIndex, LPCTSTR text, int width);
InsertItem(const LVITEM * item)33   int InsertItem(const LVITEM* item) { return ListView_InsertItem(_window, item); }
34   int InsertItem(int index, LPCTSTR text);
SetItem(const LVITEM * item)35   bool SetItem(const LVITEM* item) { return BOOLToBool(ListView_SetItem(_window, item)); }
36   int SetSubItem(int index, int subIndex, LPCTSTR text);
37 
38   #ifndef _UNICODE
39 
InsertColumn(int columnIndex,const LVCOLUMNW * columnInfo)40   int InsertColumn(int columnIndex, const LVCOLUMNW *columnInfo) { return (int)SendMessage(LVM_INSERTCOLUMNW, (WPARAM)columnIndex, (LPARAM)columnInfo); }
41   int InsertColumn(int columnIndex, LPCWSTR text, int width);
InsertItem(const LV_ITEMW * item)42   int InsertItem(const LV_ITEMW* item) { return (int)SendMessage(LVM_INSERTITEMW, 0, (LPARAM)item); }
43   int InsertItem(int index, LPCWSTR text);
SetItem(const LV_ITEMW * item)44   bool SetItem(const LV_ITEMW* item) { return BOOLToBool((BOOL)SendMessage(LVM_SETITEMW, 0, (LPARAM)item)); }
45   int SetSubItem(int index, int subIndex, LPCWSTR text);
46 
47   #endif
48 
DeleteItem(int itemIndex)49   bool DeleteItem(int itemIndex) { return BOOLToBool(ListView_DeleteItem(_window, itemIndex)); }
50 
GetSelectedCount()51   UINT GetSelectedCount() const { return ListView_GetSelectedCount(_window); }
GetItemCount()52   int GetItemCount() const { return ListView_GetItemCount(_window); }
53 
GetSelectionMark()54   INT GetSelectionMark() const { return ListView_GetSelectionMark(_window); }
55 
SetItemCount(int numItems)56   void SetItemCount(int numItems) { ListView_SetItemCount(_window, numItems); }
SetItemCountEx(int numItems,DWORD flags)57   void SetItemCountEx(int numItems, DWORD flags) {  ListView_SetItemCountEx(_window, numItems, flags); }
58 
GetNextItem(int startIndex,UINT flags)59   int GetNextItem(int startIndex, UINT flags) const { return ListView_GetNextItem(_window, startIndex, flags); }
GetNextSelectedItem(int startIndex)60   int GetNextSelectedItem(int startIndex) const { return GetNextItem(startIndex, LVNI_SELECTED); }
GetFocusedItem()61   int GetFocusedItem() const { return GetNextItem(-1, LVNI_FOCUSED); }
62 
GetItem(LVITEM * item)63   bool GetItem(LVITEM* item) const { return BOOLToBool(ListView_GetItem(_window, item)); }
64   bool GetItemParam(int itemIndex, LPARAM &param) const;
GetItemText(int itemIndex,int subItemIndex,LPTSTR text,int textSizeMax)65   void GetItemText(int itemIndex, int subItemIndex, LPTSTR text, int textSizeMax) const
66     { ListView_GetItemText(_window, itemIndex, subItemIndex, text, textSizeMax); }
SortItems(PFNLVCOMPARE compareFunction,LPARAM dataParam)67   bool SortItems(PFNLVCOMPARE compareFunction, LPARAM dataParam)
68     { return BOOLToBool(ListView_SortItems(_window, compareFunction, dataParam)); }
69 
SetItemState(int index,UINT state,UINT mask)70   void SetItemState(int index, UINT state, UINT mask) { ListView_SetItemState(_window, index, state, mask); }
SetItemState_Selected(int index,bool select)71   void SetItemState_Selected(int index, bool select) { SetItemState(index, select ? LVIS_SELECTED : 0, LVIS_SELECTED); }
SetItemState_Selected(int index)72   void SetItemState_Selected(int index) { SetItemState(index, LVIS_SELECTED, LVIS_SELECTED); }
SelectAll()73   void SelectAll() { SetItemState_Selected(-1); }
SetItemState_FocusedSelected(int index)74   void SetItemState_FocusedSelected(int index) { SetItemState(index, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED); }
GetItemState(int index,UINT mask)75   UINT GetItemState(int index, UINT mask) const { return ListView_GetItemState(_window, index, mask); }
IsItemSelected(int index)76   bool IsItemSelected(int index) const { return GetItemState(index, LVIS_SELECTED) == LVIS_SELECTED; }
77 
GetColumn(int columnIndex,LVCOLUMN * columnInfo)78   bool GetColumn(int columnIndex, LVCOLUMN* columnInfo) const
79     { return BOOLToBool(ListView_GetColumn(_window, columnIndex, columnInfo)); }
80 
SetImageList(HIMAGELIST imageList,int imageListType)81   HIMAGELIST SetImageList(HIMAGELIST imageList, int imageListType)
82     { return ListView_SetImageList(_window, imageList, imageListType); }
83 
84   // version 4.70: NT5 | (NT4 + ie3) | w98 | (w95 + ie3)
GetExtendedListViewStyle()85   DWORD GetExtendedListViewStyle() { return ListView_GetExtendedListViewStyle(_window); }
SetExtendedListViewStyle(DWORD exStyle)86   void SetExtendedListViewStyle(DWORD exStyle) { ListView_SetExtendedListViewStyle(_window, exStyle); }
SetExtendedListViewStyle(DWORD exMask,DWORD exStyle)87   void SetExtendedListViewStyle(DWORD exMask, DWORD exStyle) { ListView_SetExtendedListViewStyleEx(_window, exMask, exStyle); }
88 
SetCheckState(UINT index,bool checkState)89   void SetCheckState(UINT index, bool checkState) { ListView_SetCheckState(_window, index, BoolToBOOL(checkState)); }
GetCheckState(UINT index)90   bool GetCheckState(UINT index) { return BOOLToBool(ListView_GetCheckState(_window, index)); }
91 
EnsureVisible(int index,bool partialOK)92   bool EnsureVisible(int index, bool partialOK) { return BOOLToBool(ListView_EnsureVisible(_window, index, BoolToBOOL(partialOK))); }
93 
GetItemRect(int index,RECT * rect,int code)94   bool GetItemRect(int index, RECT *rect, int code) { return BOOLToBool(ListView_GetItemRect(_window, index, rect, code)); }
95 
GetEditControl()96   HWND GetEditControl() { return ListView_GetEditControl(_window) ; }
EditLabel(int itemIndex)97   HWND EditLabel(int itemIndex) { return ListView_EditLabel(_window, itemIndex) ; }
98 
RedrawItems(int firstIndex,int lastIndex)99   bool RedrawItems(int firstIndex, int lastIndex) { return BOOLToBool(ListView_RedrawItems(_window, firstIndex, lastIndex)); }
RedrawAllItems()100   bool RedrawAllItems()
101   {
102     if (GetItemCount() > 0)
103       return RedrawItems(0, GetItemCount() - 1);
104     return true;
105   }
RedrawItem(int index)106   bool RedrawItem(int index) { return RedrawItems(index, index); }
107 
HitTest(LPLVHITTESTINFO info)108   int HitTest(LPLVHITTESTINFO info) { return ListView_HitTest(_window, info); }
GetBkColor()109   COLORREF GetBkColor() { return ListView_GetBkColor(_window); }
SetColumnWidth(int iCol,int cx)110   bool SetColumnWidth(int iCol, int cx) { return BOOLToBool(ListView_SetColumnWidth(_window, iCol, cx)); }
SetColumnWidthAuto(int iCol)111   bool SetColumnWidthAuto(int iCol) { return SetColumnWidth(iCol, LVSCW_AUTOSIZE); }
112 };
113 
114 class CListView2: public CListView
115 {
116   WNDPROC _origWindowProc;
117 public:
118   void SetWindowProc();
119   virtual LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
120 };
121 
122 /*
123 class CListView3: public CListView2
124 {
125 public:
126   virtual LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
127 };
128 */
129 
130 }}
131 
132 #endif
133