Re: how to support multiple selection in treeview?
On Oct 26, 5:38 am, "JD" <jdt_yo...@yahoo.com> wrote:
It seems that CTreeCtrl doesn't support multiple items selection. Is it
correct? Its member function GetSelectedItem() returns "the" selected item.
Then how do we allow multiple selections? Any help is appreciated.
you could try something like....
void CMyTree::OnLButtonDown(UINT nFlags, CPoint point) {
m_nClickFlags = nFlags;
HTREEITEM iClk = GetClickedItem();
if (iClk) {
if (m_fMultiselectable) {
if (m_nClickFlags & MK_CONTROL) {
// we change selection
ChgSelection(iClk);
return;
}
}
// we set as selection
SetItemState(iClk, TVIS_SELECTED , TVIS_SELECTED);
} else CTreeCtrl::OnLButtonDown(nFlags, point);
}
HTREEITEM CMyTree::GetClickedItem() {
DWORD dwPos = GetMessagePos();
CPoint spt( LOWORD(dwPos), HIWORD(dwPos) );
ScreenToClient(&spt);
m_pt = spt;
UINT test;
HTREEITEM hti = HitTest(spt, &test);
if ((hti != 0) && (test & (TVHT_ONITEM | TVHT_ONITEMRIGHT))) return
hti;
if (hti == 0) {
ClearSelection();
}
return 0;
}
void CMyTree::ChgSelection(HTREEITEM iClk) {
if GetItemState(iClk, TVIS_SELECTED) == TVIS_SELECTED) {
SetItemState(iClk, 0 , TVIS_SELECTED);
} else {
SetItemState(iClk, TVIS_SELECTED , TVIS_SELECTED);
}
}