Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > TreeControl: TVI_SORT с моим компаратором


Автор: _hunter 5.11.2008, 22:39
Добрый день.

Можно ли как-то сделать так, чтобы дерево само сортировалось (вставка с InsertAfter == TVI_SORT) но при этом использовало мой компаратор?

С уважением...

Автор: Andrey44 6.11.2008, 08:08
При инсерте сортируй.
Код

// Sort the item in reverse alphabetical order.
int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
   // lParamSort contains a pointer to the tree control.
   // The lParam of an item is just its handle, 
   // as specified with SetItemData
   CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*)lParamSort;
   CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam1);
   CString strItem2 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam2);

   return strItem2.Compare(strItem1);
}


TVSORTCB tvs;

// Sort the tree control's items using my
// callback procedure.
tvs.hParent = TVI_ROOT;
tvs.lpfnCompare = MyCompareProc;
tvs.lParam = (LPARAM)&m_TreeCtrl;

m_TreeCtrl.SortChildrenCB(&tvs);


Автор: _hunter 6.11.2008, 10:28
Ручная сортировка не подходит. Как я писал -- нужно чтобы дерево сортировалось само.

Автор: Andrey44 6.11.2008, 10:47
А откуда оно само узнает(дерево) как ему надо сортироваться?

Автор: _hunter 6.11.2008, 12:47
В этом, вроде как, и состоит вопрос...

Автор: Andrey44 6.11.2008, 13:00
 smile ну я думаю еще не написан компилер который умеет читать мысли.

Автор: _hunter 6.11.2008, 14:05
А при чем тут чтение мыслей? Все, что мне нужно -- чтобы стандартный сортировщик дерева использовал мой компаратор.

Автор: Andrey44 6.11.2008, 14:10
Цитата(_hunter @  6.11.2008,  14:05 Найти цитируемый пост)
А при чем тут чтение мыслей? Все, что мне нужно -- чтобы стандартный сортировщик дерева использовал мой компаратор. 

Хорошо, по каким критериям он должен сравнивать? По алфавиту, по длинне строки или по тому и другому сразу?
Откуда компаратор может знать что вы от него хотите?

Автор: _hunter 6.11.2008, 15:17
Цитата(Andrey44 @  6.11.2008,  13:10 Найти цитируемый пост)
Откуда компаратор может знать что вы от него хотите?

Эм... потому как в компараторе написанно (псевдокод):
если итем1дата > итем2дата
вернуть 1;
иначе вернуть -1;
...

Автор: Andrey44 6.11.2008, 15:26
А по каким критериям он должен сравнивать итем1дата и итем2дата ?

Автор: _hunter 6.11.2008, 16:39
эээ... по критерию больше/меньше...

Автор: Bukmop 6.11.2008, 19:06
sorry
ошибся

Автор: Artemon 30.11.2008, 14:22
Цитата

  ну я думаю еще не написан компилер который умеет читать мысли.


Вообще-то это стандартный подход, который например используется в STL.

Автор: Andrey44 1.12.2008, 07:51
Цитата(Artemon @  30.11.2008,  14:22 Найти цитируемый пост)
стандартный подход, который например используется в STL.

Подход к чему?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)