Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / VC++ сортировка CListCtrl / 10 сообщений из 10, страница 1 из 1
04.12.2005, 20:58
    #33416060
Mashusya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VC++ сортировка CListCtrl
LVFINDINFO info;
info.flags = LVFI_STRING;
LPCTSTR lpszmyString;
int index;
for (i=0;i!=m_WndVariable.GetItemCount();i++)
{
UpdateData(TRUE);
lpszmyString=m_WndVariable.GetItemText(i,0);

info.psz=lpszmyString;
while ((index=m_WndVariable.FindItem(&info)) != -1)
{
m_WndVariable.DeleteItem(index);
}
UpdateData(FALSE);
}

почему-то не сортирует, m_WndVariable- переменная, связанная с ListCtrl'ом, интересует сортировка первого столбца (нулевого)
...
Рейтинг: 0 / 0
04.12.2005, 21:02
    #33416061
Mashusya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VC++ сортировка CListCtrl
точнее это не сортировка, нужно удалить повторяющиеся строчки, те если есть несколько одинаковых строк, то оставить только одну из них
...
Рейтинг: 0 / 0
04.12.2005, 21:19
    #33416065
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VC++ сортировка CListCtrl
Нужно обнулить LVFINDINFO info = {0}; что бы не было случайных значений в полях, которые не используются.
И поиск нужно начинать не с начала списка, а со следующего за ним. Иначе все элементы, которые дублируются, сотрете.

Код: plaintext
1.
2.
3.
while ((index=m_WndVariable.FindItem(&info, i+ 1 )) != - 1 )
{
m_WndVariable.DeleteItem(index);
}
...
Рейтинг: 0 / 0
04.12.2005, 22:06
    #33416086
Mashusya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VC++ сортировка CListCtrl
все равно ничего не удаляет.. вообще
...
Рейтинг: 0 / 0
04.12.2005, 23:15
    #33416117
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VC++ сортировка CListCtrl
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
	int i;
	LVFINDINFO info;
	info.flags = LVFI_STRING;
	CString myString;
	int index;
	for (i= 0 ;i!=m_WndVariable.GetItemCount();i++)
		{	
		myString=m_WndVariable.GetItemText(i, 0 );

		info.psz=(LPCSTR)myString;
		while ((index=m_WndVariable.FindItem(&info,i+ 1 )) != - 1 )
			{
			m_WndVariable.DeleteItem(index);
			}
		}


GetItemText возвращает объект CString, а не указатель на строку. UpdateData вызывать не нужно, тк m_WndVariable это control.
...
Рейтинг: 0 / 0
05.12.2005, 10:09
    #33416412
Mashusya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VC++ сортировка CListCtrl
уже лучше, но не намного..
в общем если поместить туда 5 одинаковых строчек, то 2 или 3 он из них удалит
если тройку поместить, может удалить одну строчку, может нет. .=(
...
Рейтинг: 0 / 0
05.12.2005, 10:24
    #33416456
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VC++ сортировка CListCtrl
Mashusyaуже лучше, но не намного..
в общем если поместить туда 5 одинаковых строчек, то 2 или 3 он из них удалит
если тройку поместить, может удалить одну строчку, может нет. .=(
В таких случаях, нужно сначала найти номера всех элементов, удовлетворяющих условию, а потом их оптом удалить. Потому, что операция удаления изменяет номера элементов.
...
Рейтинг: 0 / 0
05.12.2005, 10:32
    #33416480
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VC++ сортировка CListCtrl
Mashusyaуже лучше, но не намного..
в общем если поместить туда 5 одинаковых строчек, то 2 или 3 он из них удалит
если тройку поместить, может удалить одну строчку, может нет. .=(

Исправьте i+1 на i
Код: plaintext
1.
while ((index=m_WndVariable.FindItem(&info,i)) != - 1 )
...
Рейтинг: 0 / 0
05.12.2005, 10:35
    #33416491
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VC++ сортировка CListCtrl
Я забыл, что в FindItem начальный индекс исключен из поиска. MFC временами грешит отсутствием логики.
...
Рейтинг: 0 / 0
05.12.2005, 11:56
    #33416748
Mashusya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VC++ сортировка CListCtrl
да, получилось, надо не i+1,а i
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / VC++ сортировка CListCtrl / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]