4 class CListView
: public CWindow
8 HWND
Create(HWND hWndParent
, _U_RECT rect
, LPCTSTR szWindowName
= NULL
, DWORD dwStyle
= 0,
9 DWORD dwExStyle
= 0, _U_MENUorID MenuOrID
= 0U, LPVOID lpCreateParam
= NULL
)
11 m_hWnd
= ::CreateWindowEx(dwExStyle
,
17 rect
.m_lpRect
->right
- rect
.m_lpRect
->left
,
18 rect
.m_lpRect
->bottom
- rect
.m_lpRect
->top
,
21 _AtlBaseModule
.GetModuleInstance(),
27 void SetRedraw(BOOL redraw
)
29 SendMessage(WM_SETREDRAW
, redraw
);
32 BOOL
SetTextBkColor(COLORREF cr
)
34 return (BOOL
)SendMessage(LVM_SETTEXTBKCOLOR
, 0, cr
);
37 BOOL
SetBkColor(COLORREF cr
)
39 return (BOOL
)SendMessage(LVM_SETBKCOLOR
, 0, cr
);
42 BOOL
SetTextColor(COLORREF cr
)
44 return (BOOL
)SendMessage(LVM_SETTEXTCOLOR
, 0, cr
);
47 DWORD
SetExtendedListViewStyle(DWORD dw
, DWORD dwMask
= 0)
49 return (DWORD
)SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE
, dwMask
, dw
);
52 int InsertColumn(int iCol
, LV_COLUMN
* pcol
)
54 return (int)SendMessage(LVM_INSERTCOLUMN
, iCol
, reinterpret_cast<LPARAM
>(pcol
));
57 int InsertColumn(int iCol
, LPWSTR pszText
, int fmt
, int width
= -1, int iSubItem
= -1, int iImage
= -1, int iOrder
= -1)
59 LV_COLUMN column
= {0};
60 column
.mask
= LVCF_TEXT
|LVCF_FMT
;
61 column
.pszText
= pszText
;
65 column
.mask
|= LVCF_WIDTH
;
70 column
.mask
|= LVCF_SUBITEM
;
71 column
.iSubItem
= iSubItem
;
75 column
.mask
|= LVCF_IMAGE
;
76 column
.iImage
= iImage
;
80 column
.mask
|= LVCF_ORDER
;
81 column
.iOrder
= iOrder
;
83 return InsertColumn(iCol
, &column
);
86 int GetColumnWidth(int iCol
)
88 return (int)SendMessage(LVM_GETCOLUMNWIDTH
, iCol
);
91 HIMAGELIST
SetImageList(HIMAGELIST himl
, int iImageList
)
93 return (HIMAGELIST
)SendMessage(LVM_SETIMAGELIST
, iImageList
, reinterpret_cast<LPARAM
>(himl
));
96 int InsertItem(const LV_ITEM
* pitem
)
98 return (int)SendMessage(LVM_INSERTITEM
, 0, reinterpret_cast<LPARAM
>(pitem
));
101 BOOL
DeleteItem(int i
)
103 return (BOOL
)SendMessage(LVM_DELETEITEM
, i
, 0);
106 BOOL
GetItem(LV_ITEM
* pitem
)
108 return (BOOL
)SendMessage(LVM_GETITEM
, 0, reinterpret_cast<LPARAM
>(pitem
));
111 BOOL
SetItem(const LV_ITEM
* pitem
)
113 return (BOOL
)SendMessage(LVM_SETITEM
, 0, reinterpret_cast<LPARAM
>(pitem
));
118 return SendMessage(LVM_GETITEMCOUNT
);
121 BOOL
DeleteAllItems()
123 return (BOOL
)SendMessage(LVM_DELETEALLITEMS
);
128 return (BOOL
)SendMessage(LVM_UPDATE
, i
, 0);
131 UINT
GetSelectedCount()
133 return (UINT
)SendMessage(LVM_GETSELECTEDCOUNT
);
136 BOOL
SortItems(PFNLVCOMPARE pfnCompare
, PVOID lParam
)
138 return (BOOL
)SendMessage(LVM_SORTITEMS
, (WPARAM
)lParam
, (LPARAM
) pfnCompare
);
141 BOOL
EnsureVisible(int i
, BOOL fPartialOK
)
143 return (BOOL
)SendMessage(LVM_ENSUREVISIBLE
, i
, MAKELPARAM((fPartialOK
),0));
146 HWND
EditLabel(int i
)
148 return (HWND
)SendMessage(LVM_EDITLABEL
, i
, 0);
151 int GetSelectionMark()
153 return (int)SendMessage(LVM_GETSELECTIONMARK
);
156 int GetNextItem(int i
, WORD flags
)
158 return (int)SendMessage(LVM_GETNEXTITEM
, i
, MAKELPARAM((flags
),0));
161 void GetItemSpacing(SIZE
& spacing
, BOOL bSmallIconView
= FALSE
)
163 DWORD ret
= SendMessage(LVM_GETITEMSPACING
, bSmallIconView
);
164 spacing
.cx
= LOWORD(ret
);
165 spacing
.cy
= HIWORD(ret
);
168 void SetItemState(int i
, UINT state
, UINT mask
)
171 item
.stateMask
= mask
;
173 SendMessage(LVM_SETITEMSTATE
, i
, reinterpret_cast<LPARAM
>(&item
));
176 int HitTest(LV_HITTESTINFO
* phtInfo
)
178 return (int)SendMessage(LVM_HITTEST
, 0, reinterpret_cast<LPARAM
>(&phtInfo
));
181 DWORD_PTR
GetItemData(int i
)
185 lvItem
.mask
= LVIF_PARAM
;
186 BOOL ret
= GetItem(&lvItem
);
187 return (DWORD_PTR
)(ret
? lvItem
.lParam
: NULL
);
190 BOOL
GetSelectedItem(LV_ITEM
* pItem
)
192 pItem
->iItem
= GetNextItem(-1, LVNI_ALL
| LVNI_SELECTED
);
193 if (pItem
->iItem
== -1)
195 return GetItem(pItem
);
200 template<typename TItemData
= DWORD_PTR
>
202 public CWindowImplBaseT
<CWindow
>
204 public: // Configuration methods
206 HWND
Create(HWND hWndParent
, DWORD dwStyles
= 0, DWORD dwExStyles
= 0)
210 dwStyles
= WS_CHILD
| WS_VISIBLE
| WS_CLIPCHILDREN
;
215 dwExStyles
= WS_EX_TOOLWINDOW
;
218 m_hWnd
= CreateWindowExW(dwExStyles
,
222 0, 0, 0, 0, hWndParent
,
224 _AtlBaseModule
.GetModuleInstance(),
230 /* Identify the version we're using */
231 SetButtonStructSize();
236 DWORD
SetButtonStructSize()
238 return SendMessageW(TB_BUTTONSTRUCTSIZE
, sizeof(TBBUTTON
), 0);
243 return (HWND
)SendMessageW(TB_GETTOOLTIPS
);
246 DWORD
SetTooltip(HWND hWndTooltip
)
248 return SendMessageW(TB_SETTOOLTIPS
, hWndTooltip
, 0);
253 return SendMessageW(TB_GETHOTITEM
);
256 public: // Button list management methods
259 return SendMessageW(TB_BUTTONCOUNT
);
262 DWORD
GetButton(int index
, TBBUTTON
* btn
)
264 return SendMessageW(TB_GETBUTTON
, index
, (LPARAM
) btn
);
267 DWORD
AddButton(TBBUTTON
* btn
)
269 return SendMessageW(TB_ADDBUTTONS
, 1, (LPARAM
) btn
);
272 DWORD
AddButtons(int count
, TBBUTTON
* buttons
)
274 return SendMessageW(TB_ADDBUTTONS
, count
, (LPARAM
) buttons
);
277 DWORD
InsertButton(int insertAt
, TBBUTTON
* btn
)
279 return SendMessageW(TB_INSERTBUTTON
, insertAt
, (LPARAM
) btn
);
282 DWORD
MoveButton(int oldIndex
, int newIndex
)
284 return SendMessageW(TB_MOVEBUTTON
, oldIndex
, newIndex
);
287 DWORD
DeleteButton(int index
)
289 return SendMessageW(TB_DELETEBUTTON
, index
, 0);
292 DWORD
GetButtonInfo(int cmdId
, TBBUTTONINFO
* info
)
294 return SendMessageW(TB_GETBUTTONINFO
, cmdId
, (LPARAM
) info
);
297 DWORD
SetButtonInfo(int cmdId
, TBBUTTONINFO
* info
)
299 return SendMessageW(TB_SETBUTTONINFO
, cmdId
, (LPARAM
) info
);
302 public: // Layout management methods
303 DWORD
SetButtonSize(int w
, int h
)
305 return SendMessageW(TB_SETBUTTONSIZE
, 0, MAKELONG(w
, h
));
310 return SendMessageW(TB_AUTOSIZE
);
313 DWORD
GetMetrics(TBMETRICS
* tbm
)
315 return SendMessageW(TB_GETMETRICS
, 0, (LPARAM
) tbm
);
318 DWORD
SetMetrics(TBMETRICS
* tbm
)
320 return SendMessageW(TB_SETMETRICS
, 0, (LPARAM
) tbm
);
323 DWORD
GetItemRect(int index
, LPRECT prcItem
)
325 return SendMessageW(TB_GETITEMRECT
, index
, (LPARAM
) prcItem
);
328 DWORD
SetRedraw(BOOL bEnable
)
330 return SendMessageW(WM_SETREDRAW
, bEnable
);
333 public: // Image list management methods
334 DWORD
SetImageList(HIMAGELIST himl
)
336 return SendMessageW(TB_SETIMAGELIST
, 0, (LPARAM
) himl
);
339 public: // Other methods
340 INT
HitTest(PPOINT ppt
)
342 return (INT
) SendMessageW(TB_HITTEST
, 0, (LPARAM
) ppt
);
345 public: // Utility methods
346 TItemData
* GetItemData(int index
)
349 GetButton(index
, &btn
);
350 return (TItemData
*) btn
.dwData
;
353 DWORD
SetItemData(int index
, TItemData
* data
)
355 TBBUTTONINFOW info
= { 0 };
356 info
.cbSize
= sizeof(info
);
357 info
.dwMask
= TBIF_BYINDEX
| TBIF_LPARAM
;
358 info
.lParam
= (DWORD_PTR
) data
;
359 return SetButtonInfo(index
, &info
);