Premnath Mali Ответов: 1

Как обнаружить событие mousedown в элементе управления ctree в mfc


У меня есть один элемент управления деревом в моем диалоге я хочу показать отмеченный элемент
смотрите мы можем выбрать несколько флажков я хочу показать последний проверенный элемент

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

void CTreeSetControlDlg::OnNMClickTreereletion(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: Add your control notification handler code here
	// Select the item that is at the point myPoint.
	static int i=0;
	CString m;
	HTREEITEM hItem=NULL;
	if(WM_LBUTTONDOWN)
	{
		hItem=m_treeRel.GetSelectedItem();
		m=m_treeRel.GetItemText(hItem);
		//m.Format(_T("Captured...%d"),i);
		ShowMessage(m);
		i++;
	}

	*pResult = 0;
}

1 Ответов

Рейтинг:
4

Jochen Arndt

Вы занимаетесь NM_CLICK уведомление, которое отправляется при нажатии левой кнопки в элементе управления деревом. Поэтому нет необходимости проверять, нажата ли левая кнопка.

Но когда это сообщение обрабатывается вашим кодом, обработка по умолчанию еще не была вызвана, так что щелкнутый элемент еще не выбран.

Чтобы получить щелкнутый элемент, вы можете использовать что-то вроде

UINT uFlags = 0;
CPoint pt(0, 0);
GetCursorPos(&pt);
m_treeRel.ScreenToClient(&pt);
HTREEITEM hItem = m_treeRel.HitTest(pt, &uFlags);
if(NULL != hItem && (TVHT_ONITEM  & uFlags))
{
    // Do something with clicked item
}

Не совсем понятно, чего вы в итоге хотите добиться. Но часто существует несколько уведомлений и сообщений, которые могут быть использованы для конкретных задач. Так что вам тоже стоит взглянуть на них. Кандидатом может быть Код уведомления TVN_SELCHANGING (Windows)[^].


Premnath Mali

на самом деле я работаю над чекбоксом, поэтому с помощью этого решения я получаю щелчок по элементу
но если я снял галочку с этого пункта, он все равно вернет тот же самый пункт

но это прекрасно, я получил на самом деле то, что хочу, спасибо тебе за это!!!!

Jochen Arndt

Приятно слышать, что вы решили эту проблему, и спасибо вам за то, что вы дали ответ.

Чтобы проверить, если нажал на проверить проверить коробку на флаг TVHT_ONITEMSTATEICON.
Текущее состояние флажка можно определить как обычно с помощью GetCheck (hItem), но обратите внимание, что ваш обработчик вызывается до обновления состояния (checked: will be unchecked; uncheked: will be checked).

Premnath Mali

Спасибо и за это тоже....!!!
Это тоже полезно для меня...!