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
));
116 BOOL
FindItem(int iStart
, const LV_FINDINFO
* plvfi
)
118 return (BOOL
)SendMessage(LVM_FINDITEM
, iStart
, (LPARAM
) plvfi
);
123 return SendMessage(LVM_GETITEMCOUNT
);
126 BOOL
DeleteAllItems()
128 return (BOOL
)SendMessage(LVM_DELETEALLITEMS
);
133 return (BOOL
)SendMessage(LVM_UPDATE
, i
, 0);
136 UINT
GetSelectedCount()
138 return (UINT
)SendMessage(LVM_GETSELECTEDCOUNT
);
141 BOOL
SortItems(PFNLVCOMPARE pfnCompare
, PVOID lParam
)
143 return (BOOL
)SendMessage(LVM_SORTITEMS
, (WPARAM
)lParam
, (LPARAM
) pfnCompare
);
146 BOOL
EnsureVisible(int i
, BOOL fPartialOK
)
148 return (BOOL
)SendMessage(LVM_ENSUREVISIBLE
, i
, MAKELPARAM((fPartialOK
),0));
151 HWND
EditLabel(int i
)
153 return (HWND
)SendMessage(LVM_EDITLABEL
, i
, 0);
156 int GetSelectionMark()
158 return (int)SendMessage(LVM_GETSELECTIONMARK
);
161 int GetNextItem(int i
, WORD flags
)
163 return (int)SendMessage(LVM_GETNEXTITEM
, i
, MAKELPARAM((flags
),0));
166 void GetItemSpacing(SIZE
& spacing
, BOOL bSmallIconView
= FALSE
)
168 DWORD ret
= SendMessage(LVM_GETITEMSPACING
, bSmallIconView
);
169 spacing
.cx
= LOWORD(ret
);
170 spacing
.cy
= HIWORD(ret
);
173 UINT
GetItemState(int i
, UINT mask
)
175 return SendMessage(LVM_GETITEMSTATE
, i
, (LPARAM
)mask
);
178 void SetItemState(int i
, UINT state
, UINT mask
)
181 item
.stateMask
= mask
;
183 SendMessage(LVM_SETITEMSTATE
, i
, reinterpret_cast<LPARAM
>(&item
));
186 int HitTest(LV_HITTESTINFO
* phtInfo
)
188 return (int)SendMessage(LVM_HITTEST
, 0, reinterpret_cast<LPARAM
>(phtInfo
));
191 DWORD_PTR
GetItemData(int i
)
193 LVITEMW lvItem
= { 0 };
194 lvItem
.mask
= LVIF_PARAM
;
196 BOOL ret
= GetItem(&lvItem
);
197 return (DWORD_PTR
)(ret
? lvItem
.lParam
: NULL
);
200 BOOL
GetSelectedItem(LV_ITEM
* pItem
)
202 pItem
->iItem
= GetNextItem(-1, LVNI_ALL
| LVNI_SELECTED
);
203 if (pItem
->iItem
== -1)
205 return GetItem(pItem
);
208 void GetItemText(int iItem
, int iSubItem
, LPTSTR pszText
, int cchTextMax
)
211 itemInfo
.iSubItem
= iSubItem
;
212 itemInfo
.pszText
= pszText
;
213 itemInfo
.cchTextMax
= cchTextMax
;
215 SendMessage(LVM_GETITEMTEXT
, iItem
, (LPARAM
) &itemInfo
);
218 BOOL
GetItemPosition(int nItem
, POINT
* pPoint
)
220 return (BOOL
)SendMessage(LVM_GETITEMPOSITION
, nItem
, (LPARAM
)pPoint
);
223 BOOL
SetItemPosition(int nItem
, POINT
* pPoint
)
225 return (BOOL
)SendMessage(LVM_SETITEMPOSITION
, nItem
, MAKELPARAM(pPoint
->x
, pPoint
->y
));
229 template<typename TItemData
= DWORD_PTR
>
233 public: // Configuration methods
235 HWND
Create(HWND hWndParent
, DWORD dwStyles
= 0, DWORD dwExStyles
= 0)
239 dwStyles
= WS_CHILD
| WS_VISIBLE
| WS_CLIPCHILDREN
;
244 dwExStyles
= WS_EX_TOOLWINDOW
;
247 m_hWnd
= CreateWindowExW(dwExStyles
,
251 0, 0, 0, 0, hWndParent
,
253 _AtlBaseModule
.GetModuleInstance(),
259 /* Identify the version we're using */
260 SetButtonStructSize();
265 DWORD
SetButtonStructSize()
267 return SendMessageW(TB_BUTTONSTRUCTSIZE
, sizeof(TBBUTTON
), 0);
272 return (HWND
)SendMessageW(TB_GETTOOLTIPS
);
275 DWORD
SetTooltip(HWND hWndTooltip
)
277 return SendMessageW(TB_SETTOOLTIPS
, hWndTooltip
, 0);
282 return SendMessageW(TB_GETHOTITEM
);
285 DWORD
SetHotItem(INT item
)
287 return SendMessageW(TB_SETHOTITEM
, item
);
290 public: // Button list management methods
293 return SendMessageW(TB_BUTTONCOUNT
);
296 DWORD
GetButton(int index
, TBBUTTON
* btn
)
298 return SendMessageW(TB_GETBUTTON
, index
, reinterpret_cast<LPARAM
>(btn
));
301 DWORD
AddButton(TBBUTTON
* btn
)
303 return SendMessageW(TB_ADDBUTTONS
, 1, reinterpret_cast<LPARAM
>(btn
));
306 DWORD
AddButtons(int count
, TBBUTTON
* buttons
)
308 return SendMessageW(TB_ADDBUTTONS
, count
, reinterpret_cast<LPARAM
>(buttons
));
311 DWORD
InsertButton(int insertAt
, TBBUTTON
* btn
)
313 return SendMessageW(TB_INSERTBUTTON
, insertAt
, reinterpret_cast<LPARAM
>(btn
));
316 DWORD
MoveButton(int oldIndex
, int newIndex
)
318 return SendMessageW(TB_MOVEBUTTON
, oldIndex
, newIndex
);
321 DWORD
DeleteButton(int index
)
323 return SendMessageW(TB_DELETEBUTTON
, index
, 0);
326 DWORD
GetButtonInfo(int cmdId
, TBBUTTONINFO
* info
)
328 return SendMessageW(TB_GETBUTTONINFO
, cmdId
, reinterpret_cast<LPARAM
>(info
));
331 DWORD
SetButtonInfo(int cmdId
, TBBUTTONINFO
* info
)
333 return SendMessageW(TB_SETBUTTONINFO
, cmdId
, reinterpret_cast<LPARAM
>(info
));
336 DWORD
CheckButton(int cmdId
, BOOL bCheck
)
338 return SendMessageW(TB_CHECKBUTTON
, cmdId
, MAKELPARAM(bCheck
, 0));
341 public: // Layout management methods
342 DWORD
GetButtonSize()
344 return SendMessageW(TB_GETBUTTONSIZE
);
347 DWORD
SetButtonSize(int w
, int h
)
349 return SendMessageW(TB_SETBUTTONSIZE
, 0, MAKELPARAM(w
, h
));
354 return SendMessageW(TB_AUTOSIZE
);
357 DWORD
GetMaxSize(LPSIZE size
)
359 return SendMessageW(TB_GETMAXSIZE
, 0, reinterpret_cast<LPARAM
>(size
));
362 DWORD
GetIdealSize(BOOL useHeight
, LPSIZE size
)
364 return SendMessageW(TB_GETIDEALSIZE
, useHeight
, reinterpret_cast<LPARAM
>(size
));
367 DWORD
GetMetrics(TBMETRICS
* tbm
)
369 return SendMessageW(TB_GETMETRICS
, 0, reinterpret_cast<LPARAM
>(tbm
));
372 DWORD
SetMetrics(TBMETRICS
* tbm
)
374 return SendMessageW(TB_SETMETRICS
, 0, reinterpret_cast<LPARAM
>(tbm
));
377 DWORD
GetItemRect(int index
, LPRECT prcItem
)
379 return SendMessageW(TB_GETITEMRECT
, index
, reinterpret_cast<LPARAM
>(prcItem
));
382 DWORD
SetRedraw(BOOL bEnable
)
384 return SendMessageW(WM_SETREDRAW
, bEnable
);
389 return SendMessageW(TB_GETPADDING
);
392 DWORD
SetPadding(int x
, int y
)
394 return SendMessageW(TB_SETPADDING
, 0, MAKELPARAM(x
, y
));
397 public: // Image list management methods
398 DWORD
SetImageList(HIMAGELIST himl
)
400 return SendMessageW(TB_SETIMAGELIST
, 0, reinterpret_cast<LPARAM
>(himl
));
403 public: // Other methods
404 INT
HitTest(PPOINT ppt
)
406 return (INT
) SendMessageW(TB_HITTEST
, 0, reinterpret_cast<LPARAM
>(ppt
));
409 public: // Utility methods
410 TItemData
* GetItemData(int index
)
413 GetButton(index
, &btn
);
414 return (TItemData
*) btn
.dwData
;
417 DWORD
SetItemData(int index
, TItemData
* data
)
419 TBBUTTONINFOW info
= { 0 };
420 info
.cbSize
= sizeof(info
);
421 info
.dwMask
= TBIF_BYINDEX
| TBIF_LPARAM
;
422 info
.lParam
= (DWORD_PTR
) data
;
423 return SetButtonInfo(index
, &info
);
431 VOID
SetText(LPCWSTR lpszText
)
433 SendMessage(SB_SETTEXT
, SBT_NOBORDERS
, (LPARAM
) lpszText
);
436 HWND
Create(HWND hwndParent
, HMENU hMenu
)
438 m_hWnd
= CreateWindowExW(0,
441 WS_CHILD
| WS_VISIBLE
| SBARS_SIZEGRIP
,
445 _AtlBaseModule
.GetModuleInstance(),
457 HWND
Create(HWND hwndParent
)
459 m_hWnd
= CreateWindowExW(WS_EX_CLIENTEDGE
,
462 WS_CHILD
| WS_VISIBLE
| TVS_HASLINES
| TVS_SHOWSELALWAYS
,
466 _AtlBaseModule
.GetModuleInstance(),
472 HTREEITEM
AddItem(HTREEITEM hParent
, LPWSTR lpText
, INT Image
, INT SelectedImage
, LPARAM lParam
)
474 TVINSERTSTRUCTW Insert
;
476 ZeroMemory(&Insert
, sizeof(TV_INSERTSTRUCT
));
478 Insert
.item
.mask
= TVIF_TEXT
| TVIF_PARAM
| TVIF_IMAGE
| TVIF_SELECTEDIMAGE
;
479 Insert
.hInsertAfter
= TVI_LAST
;
480 Insert
.hParent
= hParent
;
481 Insert
.item
.iSelectedImage
= SelectedImage
;
482 Insert
.item
.iImage
= Image
;
483 Insert
.item
.lParam
= lParam
;
484 Insert
.item
.pszText
= lpText
;
486 return InsertItem(&Insert
);
489 void SetRedraw(BOOL redraw
)
491 SendMessage(WM_SETREDRAW
, redraw
);
494 BOOL
SetBkColor(COLORREF cr
)
496 return (BOOL
) SendMessage(TVM_SETBKCOLOR
, 0, cr
);
499 BOOL
SetTextColor(COLORREF cr
)
501 return (BOOL
) SendMessage(TVM_SETTEXTCOLOR
, 0, cr
);
504 HIMAGELIST
SetImageList(HIMAGELIST himl
, int iImageList
)
506 return (HIMAGELIST
) SendMessage(TVM_SETIMAGELIST
, iImageList
, reinterpret_cast<LPARAM
>(himl
));
509 HTREEITEM
InsertItem(const TVINSERTSTRUCTW
* pitem
)
511 return (HTREEITEM
) SendMessage(TVM_INSERTITEM
, 0, reinterpret_cast<LPARAM
>(pitem
));
514 BOOL
DeleteItem(HTREEITEM i
)
516 return (BOOL
) SendMessage(TVM_DELETEITEM
, 0, (LPARAM
)i
);
519 BOOL
GetItem(TV_ITEM
* pitem
)
521 return (BOOL
) SendMessage(TVM_GETITEM
, 0, reinterpret_cast<LPARAM
>(pitem
));
524 BOOL
SetItem(const TV_ITEM
* pitem
)
526 return (BOOL
) SendMessage(TVM_SETITEM
, 0, reinterpret_cast<LPARAM
>(pitem
));
531 return SendMessage(TVM_GETCOUNT
);
534 BOOL
EnsureVisible(HTREEITEM i
)
536 return (BOOL
) SendMessage(TVM_ENSUREVISIBLE
, 0, (LPARAM
)i
);
539 HWND
EditLabel(HTREEITEM i
)
541 return (HWND
) SendMessage(TVM_EDITLABEL
, 0, (LPARAM
)i
);
544 HTREEITEM
GetNextItem(HTREEITEM i
, WORD flags
)
546 return (HTREEITEM
)SendMessage(TVM_GETNEXTITEM
, flags
, (LPARAM
)i
);
549 UINT
GetItemState(int i
, UINT mask
)
551 return SendMessage(TVM_GETITEMSTATE
, i
, (LPARAM
) mask
);
554 HTREEITEM
HitTest(TVHITTESTINFO
* phtInfo
)
556 return (HTREEITEM
) SendMessage(TVM_HITTEST
, 0, reinterpret_cast<LPARAM
>(phtInfo
));
559 DWORD_PTR
GetItemData(HTREEITEM item
)
563 lvItem
.mask
= TVIF_PARAM
;
564 BOOL ret
= GetItem(&lvItem
);
565 return (DWORD_PTR
) (ret
? lvItem
.lParam
: NULL
);
568 HTREEITEM
GetSelection()
570 return GetNextItem(NULL
, TVGN_CARET
);
573 BOOL
Expand(HTREEITEM item
, DWORD action
)
575 return SendMessage(TVM_EXPAND
, action
, (LPARAM
)item
);
578 BOOL
SelectItem(HTREEITEM item
, DWORD action
= TVGN_CARET
)
580 return SendMessage(TVM_SELECTITEM
, action
, (LPARAM
) item
);