Thanks for sharing your code. I will modify it a little bit and reuse it.
Thanks.
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);
}
}