Member 14594285 Ответов: 3

Получить элемент, когда я нажимаю на элемент управления деревом


Я написал::
hItem = m_tree1.InsertItem(L"Car Listing", TVI_ROOT);
hCar = m_tree1.InsertItem(L"Economy", hItem);
m_tree1.InsertItem(L"BH-733", hCar);
m_tree1.InsertItem(L"SD-397", hCar);
m_tree1.InsertItem(L"JU-538", hCar);
m_tree1.InsertItem(L"DI-285", hCar);
m_tree1.InsertItem(L"AK-830", hCar);
hCar = m_tree1.InsertItem(L"Compact", hItem);
m_tree1.InsertItem(L"HG-490", hCar);
m_tree1.InsertItem(L"PE-473", hCar);
hCar = m_tree1.InsertItem(L"Standard", hItem);
m_tree1.InsertItem(L"SO-398", hCar);
m_tree1.InsertItem(L"DF-438", hCar);
m_tree1.InsertItem(L"IS-833", hCar);
hCar = m_tree1.InsertItem(L"Full Size", hItem);
m_tree1.InsertItem(L"PD-304", hCar);
hCar = m_tree1.InsertItem(L"Mini Van", hItem);
m_tree1.InsertItem(L"ID-497", hCar);
m_tree1.InsertItem(L"RU-304", hCar);
m_tree1.InsertItem(L"DK-905", hCar);
hCar = m_tree1.InsertItem(L"SUV", hItem);
m_tree1.InsertItem(L"FE-948", hCar);
m_tree1.InsertItem(L"AD-940", hCar);
hCar = m_tree1.InsertItem(L"Truck", hItem);
m_tree1.InsertItem(L"HD-394", hCar);



Я хочу получить hcar, когда я нажимаю на элемент управления дерева hcar

Я написал::

void CMFCApplication9Dlg::OnNMDblclkTree2(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: Add your control notification handler code here
	*pResult = 0;
	CString sText = m_tree1.GetItemText(hCar);
	m_text.SetWindowText(sText);

}


но на моем пульте редактирования написано "грузовик"..Я не знаю почему

Что я уже пробовал:

Я хочу слово каждый раз, когда я нажимаю.- как я могу писать?

3 Ответов

Рейтинг:
1

OriginalGriff

Потому что это последний элемент в списке добавленных элементов - и вы используете его для доступа к тексту непосредственно в обработчике DoubleClick.

Вместо этого вам нужно получить выбранный элемент из элемента управления Tree и использовать текст из него. Уведомление NM_DBLCLK даже не сообщает вам, что было дважды щелкнуто, поэтому вам нужно идентифицировать этот элемент управления дерева, а затем запросить его для выбранного элемента(ов).


Рейтинг:
0

steveb

Вам нужно будет переопределить сообщение LVN_ITEMCHANGED. Это должно выглядеть примерно так:

void CPageAddSearchStep2::OnItemchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
   LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
   m_nSelection = pNMLV->iItem; // Item index
   *pResult = 0;
}


Рейтинг:
0

KarstenK

Для получения выбранного элемента необходимо воспользоваться функцией CTreeCtrl::GetSelectedItem и НЕ положитесь на какой-нибудь предыдущий дескриптор. Это может измениться в вашем потоке управления.

Я бы рекомендовал вам полностью прочитать документацию treecontrol, потому что это какой-то сложный класс, который нуждается в некоторых знаниях. Поверьте мне: проведя это время, вы избежите большой головной боли.