Массив окон. Удаление
От: Аноним  
Дата: 22.04.08 06:25
Оценка:
У меня в программе создается много окон, одни являются детми других. В какой-то момнет это все дело надо корректно удалять. Или частично, то есть окно и всех его детей рекукрсивно

Вроде напрашивается дерево окон. Скажте, это все надо оформлять деревом или долстаточно просто списка? Удаляются ли автоматически все дети при удалении ролительского дерева?
Re: Массив окон. Удаление
От: Stormblast http://www.myspace.com/stormblastblack
Дата: 22.04.08 07:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У меня в программе создается много окон, одни являются детми других. В какой-то момнет это все дело надо корректно удалять. Или частично, то есть окно и всех его детей рекукрсивно


А>Вроде напрашивается дерево окон. Скажте, это все надо оформлять деревом или долстаточно просто списка? Удаляются ли автоматически все дети при удалении ролительского дерева?


примерно так :

class IWindow
{
realise()=0;
...
}

class Window: public IWindow
{
List<IWindow> childWindows;

Window parent;

Window(Window parent)

//удаление
realise()
{
childWindows->realise();
}
}
Re[2]: Массив окон. Удаление
От: Stormblast http://www.myspace.com/stormblastblack
Дата: 22.04.08 07:56
Оценка:
S>примерно так :

S>class IWindow

S>{
S> realise()=0;
S>...
S>}

S>class Window: public IWindow

S>{
S> List<IWindow> childWindows;

S> Window parent;


S> Window(Window parent)


S> //удаление

S> realise()
S> {
S> childWindows->realise();
S> }
S>}

забыл
Window(Window parent)
{
this->parent = parent;
если просто
void register (Window parent) {
parent.addControl(this);
}
сложнее добавлять через фабрику
}
Re: Массив окон. Удаление
От: goto Россия  
Дата: 22.04.08 09:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У меня в программе создается много окон, одни являются детми других. В какой-то момнет это все дело надо корректно удалять. Или частично, то есть окно и всех его детей рекукрсивно


А>Вроде напрашивается дерево окон. Скажте, это все надо оформлять деревом или долстаточно просто списка? Удаляются ли автоматически все дети при удалении ролительского дерева?


В принципе, винды и так хранят иерархию окон. Возможно нет необходимости заводить свой дублирующий контейнер, и поможет (рекурсивный) вызов EnumChildWindows(). Пробовали? Но сначала я бы проверил, не удаляют ли винды корректно всю дочерние окна сами при удалении родительского?
Re[2]: Массив окон. Удаление
От: Roman Odaisky Украина  
Дата: 22.04.08 22:24
Оценка:
Здравствуйте, goto, Вы писали:

А>>У меня в программе создается много окон, одни являются детми других. В какой-то момнет это все дело надо корректно удалять. Или частично, то есть окно и всех его детей рекукрсивно


А>>Вроде напрашивается дерево окон. Скажте, это все надо оформлять деревом или долстаточно просто списка? Удаляются ли автоматически все дети при удалении ролительского дерева?


G>В принципе, винды и так хранят иерархию окон. Возможно нет необходимости заводить свой дублирующий контейнер, и поможет (рекурсивный) вызов EnumChildWindows(). Пробовали? Но сначала я бы проверил, не удаляют ли винды корректно всю дочерние окна сами при удалении родительского?


А причем тут винды и WinAPI?
До последнего не верил в пирамиду Лебедева.
Re[3]: Массив окон. Удаление
От: goto Россия  
Дата: 22.04.08 23:18
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:
...
RO>А причем тут винды и WinAPI?

Да я с WinAPI перепутал. Автор топика, я думаю, разберется .
Re: Массив окон. Удаление
От: Pavel Dvorkin Россия  
Дата: 23.04.08 10:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У меня в программе создается много окон, одни являются детми других. В какой-то момнет это все дело надо корректно удалять. Или частично, то есть окно и всех его детей рекукрсивно


А>Вроде напрашивается дерево окон. Скажте, это все надо оформлять деревом или долстаточно просто списка? Удаляются ли автоматически все дети при удалении ролительского дерева?


Если речь идет об окнах Windows — да, удаляются. Сирот тут не бывает.
With best regards
Pavel Dvorkin
Re[2]: Массив окон. Удаление
От: Аноним  
Дата: 23.04.08 10:25
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Если речь идет об окнах Windows — да, удаляются. Сирот тут не бывает.


ОК, тогда предположим я буду хранить только те окна, родитель которых NULL (десктоп тобишь). Все это дело в WTL. И пусть у меня есть HWND какого-нить дочернего окна, у которого в свою очередь тоже есть дети. ТО есть если я скажу DestroyWindow(этот самый HWND), то железно придет сообщение сначала дочерним окнам а потом ему самому?
Re[3]: Массив окон. Удаление
От: Pavel Dvorkin Россия  
Дата: 23.04.08 11:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Если речь идет об окнах Windows — да, удаляются. Сирот тут не бывает.


А>ОК, тогда предположим я буду хранить только те окна, родитель которых NULL (десктоп тобишь).


Да

>Все это дело в WTL.


Не имеет значения.

>И пусть у меня есть HWND какого-нить дочернего окна, у которого в свою очередь тоже есть дети. ТО есть если я скажу DestroyWindow(этот самый HWND), то железно придет сообщение сначала дочерним окнам а потом ему самому?


Да. Только имей в виду, что DestroyWindow можно делать только в том потоке, где окно создано.
With best regards
Pavel Dvorkin
Re[4]: Массив окон. Удаление
От: Аноним  
Дата: 23.04.08 11:53
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Аноним, Вы писали:


PD>Да. Только имей в виду, что DestroyWindow можно делать только в том потоке, где окно создано.


Ага, спасибо большое
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.