Piraisudan Ответов: 3

Макрос Listview_getitem() возвращает пустую строку в win32 api


Когда я пытаюсь удалить выбранный элемент из списка, функция "ListView_GetItem()" возвращает пустой текст. Здесь только что добавлен мой код для получения выделенного текстового элемента из списка.


LVITEM lvitem;
int item = ListView_GetNextItem(listView, -1, LVNI_SELECTED);

if (selectedItem != -1)
{
			wchar_t str[1024];
			lvitem.cchTextMax= 552;
			lvitem.mask= LVIF_TEXT;
			lvitem.iItem= selectedItem;
			lvitem.pszText= str;
			ListView_GetItem(listView, &lvitem);
			// Here Printing "lvi.pszText" text
}


Примечание: Я использую ОС windows 10. Это работает правильно для меня. Но это не работает в нескольких системах, которые также имеют ту же ОС Windows 10.



Дайте мне любые предложения, чтобы решить эту проблему...

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

Когда я пытаюсь удалить выбранный элемент из списка, функция "ListView_GetItem()" возвращает пустой текст. Здесь только что добавлен мой код для получения выделенного текстового элемента из списка.


LVITEM lvitem;
int item = ListView_GetNextItem(listView, -1, LVNI_SELECTED);

if (selectedItem != -1)
{
			wchar_t str[1024];
			lvitem.cchTextMax= 552;
			lvitem.mask= LVIF_TEXT;
			lvitem.iItem= selectedItem;
			lvitem.pszText= str;
			ListView_GetItem(listView, &lvitem);
			// Here Printing "lvi.pszText" text
}


Примечание: Я использую ОС windows 10. Это работает правильно для меня. Но это не работает в нескольких системах, которые также имеют ту же ОС Windows 10.

KarstenK

опечатка: max char должен быть <512 :-O

Rick York

Вы пробовали печатать str? Вот где должен быть помещен текст.

Piraisudan

Да, я пытался. Но это работает в какой-то системе и не работает в какой-то другой системе. Чего мне не хватает? Или что это за причина?

3 Ответов

Рейтинг:
28

CPallini

Ты же не сидел lvitem.iSubItem = 0;
Кстати, как вы проверяете возвращаемую строку?


Piraisudan

Спасибо, @CPillini... Это сработало как заклинание...

CPallini

Добро пожаловать.

Рейтинг:
2

Rick York

Я удивлен, что это работает где-либо. Попробуйте что-нибудь вроде этого :

int selectedItem = ListView_GetNextItem(listView, -1, LVNI_SELECTED);
if( selectedItem != -1 )
{
    LVITEM lvitem = { 0 };
    const int strsize = 511;
    wchar_t str[strsize+1] = { 0 };
    lvitem.cchTextMax= strsize;
    lvitem.mask= LVIF_TEXT;
    lvitem.iItem= selectedItem;
    lvitem.pszText= str;
    ListView_GetItem( listView, &lvitem );
    // Here Printing "lvi.pszText" text
}


Рейтинг:
1

Michael Haephrati

Вот ваш фиксированный код:

LVITEM lvitem;
int item = ListView_GetNextItem(listView, -1, LVNI_SELECTED);

if (selectedItem != -1)
{
	wchar_t str[1024];
	lvitem.cchTextMax = 552;
	lvitem.mask = LVIF_TEXT;
	lvitem.iItem = selectedItem;
	lvitem.pszText = str;
	lvitem.iSubItem = 0;
	ListView_GetItem(listView, &lvitem);
	// Here Printing "lvi.pszText" text
}