Cum stiu ce item e selectat in tree ?

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
Post Reply
mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Cum stiu ce item e selectat in tree ?

Post by mesajflaviu » 12 May 2011, 16:08

Intr-un CTreeView am cateva item-uri pe 3 nivele ... la OnClick(...) as vrea sa vad ce item am selectat (item data ) :

Code: Select all

void CMyListTree::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here

	CTreeCtrl& Tree = GetTreeCtrl();
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	HTREEITEM hItemSel = pNMTreeView->itemNew.hItem;
	if(hItemSel)TRACE("%d\n",Tree.GetItemData(hItemSel));
	else TRACE("null\n");

	*pResult = 0;
}
dar indiferent daca selectez sau nu vreun item , rezultatul e tot null .... de ce ?

apoi am mai incercat in felul urmator :

Code: Select all

void CMyListTree::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here

	CTreeCtrl& Tree = GetTreeCtrl();
	HTREEITEM hItemSel = Tree.GetSelectedItem();
	if(hItemSel)TRACE("%d\n",Tree.GetItemData(hItemSel));
	else TRACE("null\n");

	*pResult = 0;
}
... aici am intotdeauna item-ul (item data) selectat anterior ... de ce ?



Viorel
Microsoft MVP
Microsoft MVP
Posts: 293
Joined: 13 Jul 2007, 12:26

Re: Cum stiu ce item e selectat in tree ?

Post by Viorel » 12 May 2011, 16:45

Probabil mesajul este emis înainte ca sistemul să modifice selecţia. Dacă doreşti să reacţionezi la modificarea selecţiei, atunci ar trebui să foloseşti notificarea TVN_SELGHANGED.

Pentru a afla nodul pe care se face click încearcă asta:

Code: Select all

CPoint p = ::GetMessagePos();
ScreenToClient(&p);
HTREEITEM h = HitTest(p);

mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Cum stiu ce item e selectat in tree ?

Post by mesajflaviu » 12 May 2011, 19:56

Multumesc , o sa incerc aceasta metoda .

Post Reply