nvm - [entries|archive|friends|userinfo]
nvm

[ website | мой ЖЖ ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

[Dec. 15th, 2003|12:09 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
[Tags|, ]

под катом - программерский вопрос (CListCtrl, удаление столбцов)
на него ответили.

Проблема: создаю диалог, на нем ListCtrl в режиме Report, кнопка. По кнопке такой код:

void CListMemTestDlg::OnButton1()
{
m_List.DeleteAllItems();

while (m_List.DeleteColumn(0)!=0);
for (int i=0; i<10; i++) m_List.InsertColumn(0, "col");

for (i=0; i<1000; i++)
{
int t = m_List.InsertItem(0, "itm");
m_List.SetItemData(t, i);
for (int j=0; j<10; j++) m_List.SetItemText(t,j,"12345");
}
// если включить эту строчку, утекает память
m_List.SortItems(CompareProc, 0);
}

int CALLBACK
CompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
if (lParam1>lParam2) return 1;
if (lParam1<lParam2) return -1; return 0; } и память приложения, судя по Task Manager, растёт на 36-40К на каждое нажатие кнопки. BoundsChecker молчит. Я, конечно, понимаю, что если бы ошибка была в ListCtrl, это было бы давно известно. Значит, это я что-то делаю неправильно. Но что?
LinkLeave a comment

Comments:
From:(Anonymous)
Date:December 15th, 2003 - 12:36 am

мож поможет

(Link)
функция сравнения должна быть статическим членом класса или stand-alone
попробуй первое. как реализовать второе пока сам не нарвался
[User Picture]
From:[info]nvm@lj
Date:December 15th, 2003 - 04:03 am

Re: мож поможет

(Link)
попробовал и так и так - не помогло Ж(
[User Picture]
From:[info]nvm@lj
Date:December 15th, 2003 - 09:10 pm

Re: мож поможет

(Link)
Проблема решилась таким образом: заменил
[ccode]
while (m_List.DeleteColumn(0)!=0);
[/ccode]
(примерно так было в MSDN), на
[ccode]
for (i=10; i>=0; i--)
m_List.DeleteColumn(i);
[/ccode]

но всё-таки интересно, почему так.
From:[info]f77@lj
Date:December 15th, 2003 - 11:20 am
(Link)
ой. си. кайф :)
From:(Anonymous)
Date:January 3rd, 2004 - 10:36 pm
(Link)
Проверяется в цикле на ноль
Результата конечного роль -
Только кто его там разберет,
Что когда DeleteColumn вернет...

:))


P.S.

MSDN о сообщении LVM_DELETECOLUMN : Column zero of the list-view control cannot be deleted. If you must delete column zero, insert a zero length dummy column zero and delete column one and above.

В while-цикле уничтожается на одну меньше, чем ставится в for-цикле?...
[User Picture]
From:[info]nvm@lj
Date:January 5th, 2004 - 04:07 am
(Link)
Вот. теперь понял. Спасибо.
From:(Anonymous)
Date:January 5th, 2004 - 11:11 pm
(Link)
В известном смысле за это тоже надо выразить благодарность dkuzmin :)) - ибо я попал в ваш журнал отсюда : http://www.livejournal.com/users/dkuzmin/66691.html.

Чем только не зарабатывают на жизнь поэты...
[User Picture]
From:[info]nvm@lj
Date:January 6th, 2004 - 04:19 am
(Link)
чем только не занимаются в свободное время программеры Ж)