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
);
219 template<typename TItemData
= DWORD_PTR
>
223 public: // Configuration methods
225 HWND
Create(HWND hWndParent
, DWORD dwStyles
= 0, DWORD dwExStyles
= 0)
229 dwStyles
= WS_CHILD
| WS_VISIBLE
| WS_CLIPCHILDREN
;
234 dwExStyles
= WS_EX_TOOLWINDOW
;
237 m_hWnd
= CreateWindowExW(dwExStyles
,
241 0, 0, 0, 0, hWndParent
,
243 _AtlBaseModule
.GetModuleInstance(),
249 /* Identify the version we're using */
250 SetButtonStructSize();
255 DWORD
SetButtonStructSize()
257 return SendMessageW(TB_BUTTONSTRUCTSIZE
, sizeof(TBBUTTON
), 0);
262 return (HWND
)SendMessageW(TB_GETTOOLTIPS
);
265 DWORD
SetTooltip(HWND hWndTooltip
)
267 return SendMessageW(TB_SETTOOLTIPS
, hWndTooltip
, 0);
272 return SendMessageW(TB_GETHOTITEM
);
275 DWORD
SetHotItem(INT item
)
277 return SendMessageW(TB_SETHOTITEM
, item
);
280 public: // Button list management methods
283 return SendMessageW(TB_BUTTONCOUNT
);
286 DWORD
GetButton(int index
, TBBUTTON
* btn
)
288 return SendMessageW(TB_GETBUTTON
, index
, reinterpret_cast<LPARAM
>(btn
));
291 DWORD
AddButton(TBBUTTON
* btn
)
293 return SendMessageW(TB_ADDBUTTONS
, 1, reinterpret_cast<LPARAM
>(btn
));
296 DWORD
AddButtons(int count
, TBBUTTON
* buttons
)
298 return SendMessageW(TB_ADDBUTTONS
, count
, reinterpret_cast<LPARAM
>(buttons
));
301 DWORD
InsertButton(int insertAt
, TBBUTTON
* btn
)
303 return SendMessageW(TB_INSERTBUTTON
, insertAt
, reinterpret_cast<LPARAM
>(btn
));
306 DWORD
MoveButton(int oldIndex
, int newIndex
)
308 return SendMessageW(TB_MOVEBUTTON
, oldIndex
, newIndex
);
311 DWORD
DeleteButton(int index
)
313 return SendMessageW(TB_DELETEBUTTON
, index
, 0);
316 DWORD
GetButtonInfo(int cmdId
, TBBUTTONINFO
* info
)
318 return SendMessageW(TB_GETBUTTONINFO
, cmdId
, reinterpret_cast<LPARAM
>(info
));
321 DWORD
SetButtonInfo(int cmdId
, TBBUTTONINFO
* info
)
323 return SendMessageW(TB_SETBUTTONINFO
, cmdId
, reinterpret_cast<LPARAM
>(info
));
326 DWORD
CheckButton(int cmdId
, BOOL bCheck
)
328 return SendMessageW(TB_CHECKBUTTON
, cmdId
, MAKELPARAM(bCheck
, 0));
331 public: // Layout management methods
332 DWORD
GetButtonSize()
334 return SendMessageW(TB_GETBUTTONSIZE
);
337 DWORD
SetButtonSize(int w
, int h
)
339 return SendMessageW(TB_SETBUTTONSIZE
, 0, MAKELPARAM(w
, h
));
344 return SendMessageW(TB_AUTOSIZE
);
347 DWORD
GetMaxSize(LPSIZE size
)
349 return SendMessageW(TB_GETMAXSIZE
, 0, reinterpret_cast<LPARAM
>(size
));
352 DWORD
GetIdealSize(BOOL useHeight
, LPSIZE size
)
354 return SendMessageW(TB_GETIDEALSIZE
, useHeight
, reinterpret_cast<LPARAM
>(size
));
357 DWORD
GetMetrics(TBMETRICS
* tbm
)
359 return SendMessageW(TB_GETMETRICS
, 0, reinterpret_cast<LPARAM
>(tbm
));
362 DWORD
SetMetrics(TBMETRICS
* tbm
)
364 return SendMessageW(TB_SETMETRICS
, 0, reinterpret_cast<LPARAM
>(tbm
));
367 DWORD
GetItemRect(int index
, LPRECT prcItem
)
369 return SendMessageW(TB_GETITEMRECT
, index
, reinterpret_cast<LPARAM
>(prcItem
));
372 DWORD
SetRedraw(BOOL bEnable
)
374 return SendMessageW(WM_SETREDRAW
, bEnable
);
379 return SendMessageW(TB_GETPADDING
);
382 DWORD
SetPadding(int x
, int y
)
384 return SendMessageW(TB_SETPADDING
, 0, MAKELPARAM(x
, y
));
387 public: // Image list management methods
388 DWORD
SetImageList(HIMAGELIST himl
)
390 return SendMessageW(TB_SETIMAGELIST
, 0, reinterpret_cast<LPARAM
>(himl
));
393 public: // Other methods
394 INT
HitTest(PPOINT ppt
)
396 return (INT
) SendMessageW(TB_HITTEST
, 0, reinterpret_cast<LPARAM
>(ppt
));
399 public: // Utility methods
400 TItemData
* GetItemData(int index
)
403 GetButton(index
, &btn
);
404 return (TItemData
*) btn
.dwData
;
407 DWORD
SetItemData(int index
, TItemData
* data
)
409 TBBUTTONINFOW info
= { 0 };
410 info
.cbSize
= sizeof(info
);
411 info
.dwMask
= TBIF_BYINDEX
| TBIF_LPARAM
;
412 info
.lParam
= (DWORD_PTR
) data
;
413 return SetButtonInfo(index
, &info
);
421 VOID
SetText(LPCWSTR lpszText
)
423 SendMessage(SB_SETTEXT
, SBT_NOBORDERS
, (LPARAM
) lpszText
);
426 HWND
Create(HWND hwndParent
, HMENU hMenu
)
428 m_hWnd
= CreateWindowExW(0,
431 WS_CHILD
| WS_VISIBLE
| SBARS_SIZEGRIP
,
435 _AtlBaseModule
.GetModuleInstance(),
447 HWND
Create(HWND hwndParent
)
449 m_hWnd
= CreateWindowExW(WS_EX_CLIENTEDGE
,
452 WS_CHILD
| WS_VISIBLE
| TVS_HASLINES
| TVS_SHOWSELALWAYS
,
456 _AtlBaseModule
.GetModuleInstance(),
462 HTREEITEM
AddItem(HTREEITEM hParent
, LPWSTR lpText
, INT Image
, INT SelectedImage
, LPARAM lParam
)
464 TVINSERTSTRUCTW Insert
;
466 ZeroMemory(&Insert
, sizeof(TV_INSERTSTRUCT
));
468 Insert
.item
.mask
= TVIF_TEXT
| TVIF_PARAM
| TVIF_IMAGE
| TVIF_SELECTEDIMAGE
;
469 Insert
.hInsertAfter
= TVI_LAST
;
470 Insert
.hParent
= hParent
;
471 Insert
.item
.iSelectedImage
= SelectedImage
;
472 Insert
.item
.iImage
= Image
;
473 Insert
.item
.lParam
= lParam
;
474 Insert
.item
.pszText
= lpText
;
476 return InsertItem(&Insert
);
479 void SetRedraw(BOOL redraw
)
481 SendMessage(WM_SETREDRAW
, redraw
);
484 BOOL
SetBkColor(COLORREF cr
)
486 return (BOOL
) SendMessage(TVM_SETBKCOLOR
, 0, cr
);
489 BOOL
SetTextColor(COLORREF cr
)
491 return (BOOL
) SendMessage(TVM_SETTEXTCOLOR
, 0, cr
);
494 HIMAGELIST
SetImageList(HIMAGELIST himl
, int iImageList
)
496 return (HIMAGELIST
) SendMessage(TVM_SETIMAGELIST
, iImageList
, reinterpret_cast<LPARAM
>(himl
));
499 HTREEITEM
InsertItem(const TVINSERTSTRUCTW
* pitem
)
501 return (HTREEITEM
) SendMessage(TVM_INSERTITEM
, 0, reinterpret_cast<LPARAM
>(pitem
));
504 BOOL
DeleteItem(HTREEITEM i
)
506 return (BOOL
) SendMessage(TVM_DELETEITEM
, 0, (LPARAM
)i
);
509 BOOL
GetItem(TV_ITEM
* pitem
)
511 return (BOOL
) SendMessage(TVM_GETITEM
, 0, reinterpret_cast<LPARAM
>(pitem
));
514 BOOL
SetItem(const TV_ITEM
* pitem
)
516 return (BOOL
) SendMessage(TVM_SETITEM
, 0, reinterpret_cast<LPARAM
>(pitem
));
521 return SendMessage(TVM_GETCOUNT
);
524 BOOL
EnsureVisible(HTREEITEM i
)
526 return (BOOL
) SendMessage(TVM_ENSUREVISIBLE
, 0, (LPARAM
)i
);
529 HWND
EditLabel(HTREEITEM i
)
531 return (HWND
) SendMessage(TVM_EDITLABEL
, 0, (LPARAM
)i
);
534 HTREEITEM
GetNextItem(HTREEITEM i
, WORD flags
)
536 return (HTREEITEM
)SendMessage(TVM_GETNEXTITEM
, flags
, (LPARAM
)i
);
539 UINT
GetItemState(int i
, UINT mask
)
541 return SendMessage(TVM_GETITEMSTATE
, i
, (LPARAM
) mask
);
544 HTREEITEM
HitTest(TVHITTESTINFO
* phtInfo
)
546 return (HTREEITEM
) SendMessage(TVM_HITTEST
, 0, reinterpret_cast<LPARAM
>(phtInfo
));
549 DWORD_PTR
GetItemData(HTREEITEM item
)
553 lvItem
.mask
= TVIF_PARAM
;
554 BOOL ret
= GetItem(&lvItem
);
555 return (DWORD_PTR
) (ret
? lvItem
.lParam
: NULL
);
558 HTREEITEM
GetSelection()
560 return GetNextItem(NULL
, TVGN_CARET
);
563 BOOL
Expand(HTREEITEM item
, DWORD action
)
565 return SendMessage(TVM_EXPAND
, action
, (LPARAM
)item
);
568 BOOL
SelectItem(HTREEITEM item
, DWORD action
= TVGN_CARET
)
570 return SendMessage(TVM_SELECTITEM
, action
, (LPARAM
) item
);