Member 12678806 Ответов: 1

Как получить значение lparam из дескриптора HTREEITEM


Я создал диалог с древовидным элементом управления, который извлекает данные в элемент управления списком при нажатии на любой конкретный узел древовидного элемента управления. Вот как я попытался вставить узлы.
CString *sCommonAppkey = new CString(_szApp + sIsPath);

HTREEITEM hrCommon = m_cTreeCtrl.InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, _T("Common"), icoPlanit, icoPlanit, 0, 0, (LPARAM)(LPCTSTR)sCommonAppkey, NULL, NULL);


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

При нажатии на узел он направляется в обработчик событий " OnTvnSelchangedExample"
и данные, извлекаемые из пути, указанного в поле "параметр lparam параметров" в методе методов insertitem из HTREEITEM.
void CPSysInfoDlg::OnTvnSelchangedExample(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);

	LPARAM lp = pNMTreeView->itemNew.lParam;

	CString *sTempKey = (CString *)lp;
	CString path = sTempKey->GetBuffer();
}


Я могу получить доступ к значению lparam только в обработчике событий.

Теперь я хочу реализовать функцию поиска для всех данных дерева.

поэтому мне нужно значение lparam всех дескрипторов дерева последовательно перебирать его, чтобы я мог искать конкретный текст в дереве.
Таким образом, не нажимая ни на один узел дерева, есть ли возможность получить значение lparam дескриптора дерева (HTREEITEM)

Richard MacCutchan

Нет такого понятия. LPARAM-это тип, который передается в сообщениях Windows, поэтому его значение будет зависеть от типа сообщения и генерируется в момент создания сообщения.

1 Ответов

Рейтинг:
2

Jochen Arndt

Видеть Поиск элемента в метод ctreectrl[^].

[РЕДАКТИРОВАТЬ]
Приведенная выше ссылка выполняет поиск текста элемента с помощью GetItemText (). Для получения пользовательских данных используйте CTreeCtrl:: GetItemData[^] вместо этого или даже CTreeCtrl:: GetItem[^] чтобы получить всю информацию об узле:

const CString *path = (const CString *)tree.GetItemData(hRoot);
if (0 == searchString.Compare(path))
{
    // found
    return hRoot;
}

[/РЕДАКТИРОВАТЬ]


Member 12678806

Я извлекаю данные из пути, хранящегося в lparam. Если я хочу, чтобы поиск данных мне нужен параметр lparam значения, которое будет получено

Jochen Arndt

Вы спрашивали:
"Теперь я хочу реализовать функцию поиска для всех данных дерева".

Затем вы должны начать с корня дерева и пройти через все элементы.
Вот что делает код в ссылке.

Код получает текст с помощью GetItemText (). Для получения пользовательских данных используйте GetItemData() или для получения всей информации используйте GetItem ().

Я обновлю свое решение.