Детки
vlad 24 апреля, 2004 - 01:51.Как можно удалить одного и того–же ребенка в
двух разных оконах.
BView *view =
BWindow *win1 =
BWindow *win2 =
win1–>AddChild(view);
Вход в системуНавигацияНовые комментарииДругие материалы |
Деткиvlad 24 апреля, 2004 - 01:51.Как можно удалить одного и того–же ребенка в BView *view =
win1–>AddChild(view); |
Re: Детки
Никак. Потому что в два окна один и тот же view не добавить. По определению.
Если это не реплицируемый View, заархивированный и посланный на Shelf()
Re: Детки
У меня так (прошлая формулеровка не точна):
class A: public BView;
class B: public BListView, public A;
B *x =
BView *view =
BScrollView *sv1 = new BScrollView( , cast_as(x, A), );
BScrollView *sv2 = new BScrollView( , cast_as(x, BListView), );
win1–>AddChild(view);
win2–>AddChild(sv1);view–>AddChild(sv2);
т.е. всё работает как нужно (вроде) но при выходе ошибка. как я думаю из–за авт. удаления деток. Как избавиться от ошибки?
Re: Детки
Что за ошибка, при выходе куда/что?
Самая распространенная ошибка — неправильное использование сочетания QuitRequested и Quit,
Re: Детки
Дебагер говорит:
Trying to delete a view that belongs to a window. Call RemoveSelf first.
QuitRequested и Quit пока еще непользую выход через Дескбар->Приложение–>Close All
Вываливается окошко с восклицательным знаком что приложение что–то выполнило неположенное и будет убито.
Re: Детки
Все правильно.
Потому что не используешь.
Я видимо не успел в серии своих статей это описать:(
Картина такая. Если ты закрываешь программу кнопочкой на окне или вызовом из Тракера/Дескбара, то во всех твоих окнах вызвается автоматом фунция QuitRequested.
Пропиши ее в твоих классах.
Далее, если из этой фунции ты вернешь true,
то для твоего окна приложение само вызовет BWindow::Quit().
В свою очередь Quit(), согласно BeBook, сама делает необходимую чистку.
Если QuitRequested вернет false, Quit не будет
вызвана.
Обе вышеназванные фунции виртуальные, так что ты можешь их переписать, добавив необходимые проверки и дополнительные подчистки.
Re: Детки
Спасибо. Сделал в одном из окон так:
bool win1::QuitRequested(void)
{
be_app–>PostMessage(B_QUIT_REQUESTED);
BView *view = FindView(«ScrollView»);
BView *anChild = 0;
if (view)
for (int32 i = 0; (anChild = view–>ChildAt(i)); i++)
anChild–>RemoveSelf();
return (TRUE);
}
Без самоудаления деток таже ошибка. Спасибо ещё раз!!!
Re: Детки
be_app–>PostMessage(B_QUIT_REQUESTED)
имеет смысл ставить в код в тех окнах, где правая кнопка на «заголовке» должна закрывать всю программу. Но не в диалогах и т д.Re: Детки
Понятно. Еще раз спасибо.
Отправить комментарий