|
[Dec. 15th, 2003|12:09 pm] |
под катом - программерский вопрос (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, это было бы давно известно.
Значит, это я что-то делаю неправильно. Но что? |
|
|
Comments: |
From: | (Anonymous) |
Date: | December 15th, 2003 - 12:36 am |
---|
| | мож поможет | (Link) |
|
функция сравнения должна быть статическим членом класса или stand-alone попробуй первое. как реализовать второе пока сам не нарвался
![[User Picture]](http://lj.rossia.org/userpic/3863/2147484724) | From: | nvm@lj |
Date: | December 15th, 2003 - 04:03 am |
---|
| | Re: мож поможет | (Link) |
|
попробовал и так и так - не помогло Ж(
![[User Picture]](http://lj.rossia.org/userpic/3863/2147484724) | From: | 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: | 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]](http://lj.rossia.org/userpic/3863/2147484724) | From: | nvm@lj |
Date: | January 5th, 2004 - 04:07 am |
---|
| | | (Link) |
|
Вот. теперь понял. Спасибо.
From: | (Anonymous) |
Date: | January 5th, 2004 - 11:11 pm |
---|
| | | (Link) |
|
![[User Picture]](http://lj.rossia.org/userpic/3863/2147484724) | From: | nvm@lj |
Date: | January 6th, 2004 - 04:19 am |
---|
| | | (Link) |
|
чем только не занимаются в свободное время программеры Ж) | |