saide_a Ответов: 1

значение iItem в listctrl возвращает -1


Я хочу получить строку и столбец элемента управления списком, где я нажимаю, когда нажимаю,
Я использую следующий код,
значение isubitem-это нормально , но значение iItem равно 0, когда я нажимаю на первый столбец, и -1, когда я нажимаю на другие столбцы ,
как я могу получить другое значение colomns и что не так в моем коде?
Жду тебя.

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

void MyView::OnNMClickList3(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	int r = pNMItemActivate->iSubItem;
	int t = pNMItemActivate->iItem;
	*pResult = 0;
}

1 Ответов

Рейтинг:
1

Jochen Arndt

Смотрите описание устройства NM\_CLICK (просмотр списка) код уведомления | Microsoft Docs[^]:

Цитата:
Элемент iItem lParam действителен только в том случае, если был нажат значок или метка первого столбца. Чтобы определить, какой элемент выбирается при щелчке в другом месте строки, отправьте сообщение LVM_SUBITEMHITTEST.

Добавьте это в свой код (непроверенный):
if (t < 0)
{
    LVHITTESTINFO tHitTest;
    tHitTest.pt = pNMItemActivate->ptAction;
    // This assumes that MyView is the list view for which the message is processed.
    // If not, you have to send the message to the list using it's member variable
    //  or ::SendMessage passing it's HWND
    t = SendMessage(LVM_SUBITEMHITTEST, 0, reinterpret_cast<LPARAM>(&tHitTest));
}