Изменение дерева CTreeCtrl
От: rgezikov Финляндия  
Дата: 19.02.04 12:10
Оценка:
Всем привет!

Есть у меня вот такая проблема:

В OnInitialUpdate() я инициализирую CTreeCtrl:

HTREEITEM rItem = m_DUTTree.InsertItem("DUT(s)");
for(int i = 0; i < MAX_CHAN_NUMBER; i++)
{
CString itemName;
itemName.Format("DUT %02d", i);
HTREEITEM chanItem = m_DUTTree.InsertItem(itemName.GetBuffer(), rItem);
}

Потом добавляю еще в него (DUTTree) данные. Потом хочу сбросить его и
добавить в него данные заново. Для этого делаю:

m_DUTTree.DeleteAllItems();

и то же самое, что описано выше. Но почему-то все в результате получаю
пустой контрол. Что не так?

Заранее благодарю,
Роман.
Posted via RSDN NNTP Server 1.8 beta
Re: Изменение дерева CTreeCtrl
От: Дмитрий Наумов  
Дата: 19.02.04 12:19
Оценка:
Здравствуйте, rgezikov, Вы писали:

R>Всем привет!


R>Есть у меня вот такая проблема:


R>В OnInitialUpdate() я инициализирую CTreeCtrl:


R>HTREEITEM rItem = m_DUTTree.InsertItem("DUT(s)");

R>for(int i = 0; i < MAX_CHAN_NUMBER; i++)
R>{
R> CString itemName;
R> itemName.Format("DUT %02d", i);
R> HTREEITEM chanItem = m_DUTTree.InsertItem(itemName.GetBuffer(), rItem);
R>}

R>Потом добавляю еще в него (DUTTree) данные. Потом хочу сбросить его и

R>добавить в него данные заново. Для этого делаю:

R>m_DUTTree.DeleteAllItems();


R>и то же самое, что описано выше. Но почему-то все в результате получаю

R>пустой контрол. Что не так?

R>Заранее благодарю,

R>Роман.

Папа, а баги бывают? Нет, сынок, это фантастика...
Ну даже не знаю... Проверить первый Insert (который не в цикле), что он что то осмысленное возвращает...
... << RSDN@Home 1.1 beta 1 >>
Re[2]: Изменение дерева CTreeCtrl
От: rgezikov Финляндия  
Дата: 19.02.04 12:39
Оценка:
Дмитрий Наумов wrote:

> Ну даже не знаю... Проверить первый Insert (который не в цикле), что он

> что то осмысленное возвращает...

Проверял. Ставлю точку останова на вызове первого инсерта:

HTREEITEM rItem = m_DUTTree.InsertItem("DUT(s)");

До вызова rItem показывается как "null", а после вызова "{_TREEITEM}". И
в цикле тоже самое. Тока все равно не стреляет. Ж8-/

Роман.

ЗЫ
А чего она (VS), кстати, не показывает значение указателя? Я как-то и
внимания раньше не обращал.
Posted via RSDN NNTP Server 1.8 beta
Re[3]: Изменение дерева CTreeCtrl
От: Дмитрий Наумов  
Дата: 19.02.04 12:46
Оценка:
Здравствуйте, rgezikov, Вы писали:

R>Дмитрий Наумов wrote:


>> Ну даже не знаю... Проверить первый Insert (который не в цикле), что он

>> что то осмысленное возвращает...

R>Проверял. Ставлю точку останова на вызове первого инсерта:


R>HTREEITEM rItem = m_DUTTree.InsertItem("DUT(s)");


R>До вызова rItem показывается как "null", а после вызова "{_TREEITEM}". И

R>в цикле тоже самое. Тока все равно не стреляет. Ж8-/

А сам контрол (дерево) никто не удалял? то есть в тот момент когда Insert делаете, чему m_DUTTree.m_hWnd равен?
... << RSDN@Home 1.1 beta 1 >>
Re[4]: Изменение дерева CTreeCtrl
От: rgezikov Финляндия  
Дата: 19.02.04 13:18
Оценка:
> А сам контрол (дерево) никто не удалял? то есть в тот момент когда
> Insert делаете, чему m_DUTTree.m_hWnd равен?

Я тихо фигею... Хорошо, что тут ни капли водки... Ей богу нажрался бы.


Сделал так:

m_DUTTree.DeleteAllItems();

TVINSERTSTRUCT tvInsert;
tvInsert.hParent = NULL;
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT;
tvInsert.item.pszText = _T("DUT(s)");
HTREEITEM rItem = m_DUTTree.InsertItem(&tvInsert);

TRACE( "m_DUTTree.m_hWnd = %d\n", m_DUTTree.m_hWnd );
TRACE( "rItem = %d\n", rItem );

for(int i = 0; i < MAX_CHAN_NUMBER; i++){
CString itemName;
itemName.Format("DUT %02d", i);
HTREEITEM chanItem = m_DUTTree.InsertItem(itemName.GetBuffer(), rItem);
TRACE( "chanItem[%d] = %d\n", i, chanItem );
}

А вот результат двух проходов в окне отладочного вывода:
m_DUTTree.m_hWnd = 4916404
rItem = 1498648
chanItem[0] = 1455400
chanItem[1] = 1509544
chanItem[2] = 1509648
chanItem[3] = 1509752
chanItem[4] = 1509856
chanItem[5] = 1509960
chanItem[6] = 1510064
chanItem[7] = 1510168
m_DUTTree.m_hWnd = 4916404
rItem = 1455272
chanItem[0] = 1455400
chanItem[1] = 1498648
chanItem[2] = 1509544
chanItem[3] = 1509648
chanItem[4] = 1509752
chanItem[5] = 1509856
chanItem[6] = 1509960
chanItem[7] = 1510064

То бишь, контрол никто никуда не удалял. Создаются все айтемы как
настоящие... А нифига нету на экране!!! То есть после первого прохода
есть, а потом нету!!! МАМА!!!!!!!! ААААААААА!!!!!!!!!!!

Слушайте, может там какой DDX надо выполнить или еще чего? Я с МФЦ
недавно работаю могу любую элементарщину не знать. Помогите, плиз!
"Держаться нету больше сил!" (С) Мультик

Роман.
Posted via RSDN NNTP Server 1.8 beta
Re: Изменение дерева CTreeCtrl
От: Tan4ik Россия  
Дата: 19.02.04 13:25
Оценка:
Здравствуйте, rgezikov, Вы писали:

R>и то же самое, что описано выше. Но почему-то все в результате получаю

R>пустой контрол. Что не так?

А оновлять изображение контрола не пробовал?
Invalidate, Update и т.п.?
---
С уважением,
Лазарев Андрей
Re[5]: Изменение дерева CTreeCtrl
От: Дмитрий Наумов  
Дата: 19.02.04 13:58
Оценка:
Здравствуйте, rgezikov, Вы писали:

>> А сам контрол (дерево) никто не удалял? то есть в тот момент когда

>> Insert делаете, чему m_DUTTree.m_hWnd равен?

R>Я тихо фигею... Хорошо, что тут ни капли водки... Ей богу нажрался бы.



R>Сделал так:


R>m_DUTTree.DeleteAllItems();


R>TVINSERTSTRUCT tvInsert;

R>tvInsert.hParent = NULL;
R>tvInsert.hInsertAfter = NULL;
R>tvInsert.item.mask = TVIF_TEXT;
R>tvInsert.item.pszText = _T("DUT(s)");
R>HTREEITEM rItem = m_DUTTree.InsertItem(&tvInsert);

R>TRACE( "m_DUTTree.m_hWnd = %d\n", m_DUTTree.m_hWnd );

R>TRACE( "rItem = %d\n", rItem );

R>for(int i = 0; i < MAX_CHAN_NUMBER; i++){

R> CString itemName;
R> itemName.Format("DUT %02d", i);
R> HTREEITEM chanItem = m_DUTTree.InsertItem(itemName.GetBuffer(), rItem);
R> TRACE( "chanItem[%d] = %d\n", i, chanItem );
R>}

R>А вот результат двух проходов в окне отладочного вывода:

R>m_DUTTree.m_hWnd = 4916404
R>rItem = 1498648
R>chanItem[0] = 1455400
R>chanItem[1] = 1509544
R>chanItem[2] = 1509648
R>chanItem[3] = 1509752
R>chanItem[4] = 1509856
R>chanItem[5] = 1509960
R>chanItem[6] = 1510064
R>chanItem[7] = 1510168
R>m_DUTTree.m_hWnd = 4916404
R>rItem = 1455272
R>chanItem[0] = 1455400
R>chanItem[1] = 1498648
R>chanItem[2] = 1509544
R>chanItem[3] = 1509648
R>chanItem[4] = 1509752
R>chanItem[5] = 1509856
R>chanItem[6] = 1509960
R>chanItem[7] = 1510064

R>То бишь, контрол никто никуда не удалял. Создаются все айтемы как

R>настоящие... А нифига нету на экране!!! То есть после первого прохода
R>есть, а потом нету!!! МАМА!!!!!!!! ААААААААА!!!!!!!!!!!

R>Слушайте, может там какой DDX надо выполнить или еще чего? Я с МФЦ

R>недавно работаю могу любую элементарщину не знать. Помогите, плиз!
R>"Держаться нету больше сил!" (С) Мультик

R>Роман.


Ну так как у тебя это Control, а не Value то имхо DDX тут не поможет.
... << RSDN@Home 1.1 beta 1 >>
Re[6]: Изменение дерева CTreeCtrl
От: korzhik Россия  
Дата: 19.02.04 14:12
Оценка:
Здравствуйте, rgezikov,

Я извиняюсь что влезаю в вашу дискуссию.
Боюсь показаться занудой, но всё таки скажу
не могли бы вы в дальнейшем выделять ваш код в тэги ccode /ccode или просто c/c
Вот сравните:
Вариант в вашем стиле:
BOOL CLvDeleteCommand::Execute()
{
CODComponentSet* pCompSet = GetComponents();

ClearIndices();
UpdateIndices(pCompSet);

m_pParent->RemoveChildren(pCompSet);

m_pModel->UpdateAllObservers(NULL, this);

return TRUE;
}
Вариант с тэгами:
BOOL CLvDeleteCommand::Execute()
{
    CODComponentSet* pCompSet = GetComponents();

    ClearIndices();
    UpdateIndices(pCompSet);

    m_pParent->RemoveChildren(pCompSet);

    m_pModel->UpdateAllObservers(NULL, this);

    return TRUE;
}

Правда второй вариант красивее?
Re: Изменение дерева CTreeCtrl
От: ank Россия  
Дата: 19.02.04 23:22
Оценка: 6 (1)
Здравствуйте, rgezikov, Вы писали:

R>Всем привет!


R>Есть у меня вот такая проблема:


R>В OnInitialUpdate() я инициализирую CTreeCtrl:


R>Потом добавляю еще в него (DUTTree) данные. Потом хочу сбросить его и

R>добавить в него данные заново. Для этого делаю:

R>m_DUTTree.DeleteAllItems();


R>и то же самое, что описано выше. Но почему-то все в результате получаю

R>пустой контрол. Что не так?

В свойствах TreeCtrl поставь стиль SCROLL в TRUE.

С уважением, ank
Re[2]: Изменение дерева CTreeCtrl
От: rgezikov Финляндия  
Дата: 20.02.04 06:05
Оценка:
Здравствуйте, ank, Вы писали:

ank>Здравствуйте, rgezikov, Вы писали:


R>>Всем привет!


R>>Есть у меня вот такая проблема:


R>>В OnInitialUpdate() я инициализирую CTreeCtrl:


R>>Потом добавляю еще в него (DUTTree) данные. Потом хочу сбросить его и

R>>добавить в него данные заново. Для этого делаю:

R>>m_DUTTree.DeleteAllItems();


R>>и то же самое, что описано выше. Но почему-то все в результате получаю

R>>пустой контрол. Что не так?

ank>В свойствах TreeCtrl поставь стиль SCROLL в TRUE.


ank>С уважением, ank


Спасибо огромное! Все заработало. Физику процесса, правда, я так и не осознал...

С уважением,
Роман.
Re[2]: Изменение дерева CTreeCtrl
От: Дмитрий Наумов  
Дата: 20.02.04 08:31
Оценка:
Здравствуйте, ank, Вы писали:

ank>В свойствах TreeCtrl поставь стиль SCROLL в TRUE.


Фантастика...
... << RSDN@Home 1.1 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.