Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MDI и незакрывающееся окно 
:(
    Опции темы
HalkaR
  Дата 1.4.2003, 04:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Вот приспичело мне тут склепать прогу с MDI интерфейсом bored.gif . Я вродь как сделал, тока чойто наглючил и теперь у меня окна документов по щелчку на крестик не закрываются, а сворачиваются. Что делать? Где я начудил? withstupid.gif
PM MAIL   Вверх
Paradox
Дата 1.4.2003, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Наверное где нить в OnClose() или чем нибудь подобном


--------------------
---
PM MAIL WWW   Вверх
Step
Дата 1.4.2003, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



сматри в классе ..чилюдрейм, ты наверника там наворотил


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Paradox
Дата 1.4.2003, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Цитата
..чилюдрейм
а это что такое ?


--------------------
---
PM MAIL WWW   Вверх
Step
Дата 1.4.2003, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



чилдфрейм, фрейм чилдовского окна


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Paradox
Дата 1.4.2003, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Step не обязательно.. сообщение WM_CLOSE или как там smile.gif короче его ведь кто хочешь может обрабатывать, надо просто в обработчиках такого сообщения косяк искать


--------------------
---
PM MAIL WWW   Вверх
Step
Дата 1.4.2003, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата
Step не обязательно.. сообщение WM_CLOSE или как там  короче его ведь кто хочешь может обрабатывать, надо просто в обработчиках такого сообщения косяк искать
ты конечно прав, но ведь вся программа всетаки закрывается, а не закрываються только дочерние окна


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Paradox
Дата 1.4.2003, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Step
Цитата
но ведь вся программа всетаки закрывается, а не закрываються только дочерние окна
ну да... просто закрытие чилдовского окна может обрабатываться каким угодно классом, а окна всей проги другим или по умолчанию...


--------------------
---
PM MAIL WWW   Вверх
Step
Дата 1.4.2003, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



вот я предлож клас где вероятней всего напортачил


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
HalkaR
Дата 2.4.2003, 04:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Да нет - ничего нет такого. Мож я как формы создаю не так
Код
void __fastcall TFMDI::MNewClick(TObject *Sender)
{
TFDoc* TF = new TFDoc(this);
if (!TF) return;
TF->Caption = "Документ " + IntToStr(MDIChildCount);
TF->Show();
}
А как такое окно потом по нажатию на кнопку (или менюшку) закрыть?
PM MAIL   Вверх
Paradox
Дата 2.4.2003, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



А что Close() не помогает? Кстати если на билдере пишешь сразу говори об этом, а то мы со Степом думаем что на визуале...


--------------------
---
PM MAIL WWW   Вверх
HalkaR
Дата 2.4.2003, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



НА Билдере.
При попытке вызвать CLose прога компилируется, но при вызове вываливается с сообщением о страшной ошибке.
PM MAIL   Вверх
Paradox
Дата 2.4.2003, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Ну дык ты напиши че за ошибка...


--------------------
---
PM MAIL WWW   Вверх
Step
Дата 2.4.2003, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата
void __fastcall TFMDI::MNewClick(TObject *Sender)
{
TFDoc* TF = new TFDoc(this);
if (!TF) return;
TF->Caption = "Документ " + IntToStr(MDIChildCount);
TF->Show();
}
вот это меня наводит на подозрения, тф переменная на стеке, после заверешения функции она по идеи должна удалиться, возможно сдесь и кроется проблемма.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Paradox
Дата 2.4.2003, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Можно из ф-ии возвращать указатель на новый документ, если ошибка действительно в этом... Step походу прав


--------------------
---
PM MAIL WWW   Вверх
Step
Дата 2.4.2003, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата
Step походу прав
сдесь вот это определение
Цитата
TFDoc* TF
надо сделать более глобальнее.

а это правильно
Цитата
TF = new TFDoc(this);
if (!TF) return;
TF->Caption = "Документ " + IntToStr(MDIChildCount);
TF->Show();



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Vyacheslav
Дата 2.4.2003, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Ты бы сразу написал, что на С++ Builder.
Первое - в соответствии с соглашениями MDI-интерфейса действием по умолчанию является свертывание окна, т.к. MDI-child окно не может быть скрытым. Поэтому ты ничего не напортачил. Единственный способ закрыть MDI-child окно - это его уничтожить. Для это в событии OnClose нужно прописать
Код

void fastcall TFDoc::FDocClose(TObject *Sender,
     TCloseAction &Action)
{
  Action = caFree;
}

В этом случае окно при нажатии на крестик будет уничтожаться
Твой MNewClick(TObject *Sender) можно написать гораздо проще
Код

void __fastcall TFMDI::MNewClick(TObject *Sender)
{
    (new TFDoc(this))->Caption = "Документ " + IntToStr(MDIChildCount);
}


По разбору твоего кода(если не возражаешь)
Код

TFDoc* TF = new TFDoc(this);

Это нормально
Код

if (!TF) return;

Эта проверка бессмысленна. Архаизм, оставшийся от С. Если объект TFDoc по каким либо причинам не будет создан, то будет выдано исключение и до проверки дело не дойдет. Стандарт языка требует от конструкторов, что либо они должны завершаться нормальным образом с созданием объекта(тогда проверка избыточна), либо выход должен осуществляться с генерацией исключения без создания объекта(в этом случае дело до проверки не дойдет).
Код

TF->Caption = "Документ " + IntToStr(MDIChildCount);

Нормально
Код

TF->Show();

Этот код тоже бессмысленен. MDIchild окно не может быть скрытым по определению. И по этому оно визиализируется автоматом сразу после выполнения конструктора

На будущее: указывай на чем программируешь. Я твои вопросы видел сразу, но не стал отвечать, т.к. думал что они по MFC


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
HalkaR
Дата 2.4.2003, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Vyacheslav большое спасибо! Все заработало!
Step и Paradox тоже спасибо.
Извеняюсь что не сказал про Билдер. Просто это моя 3-я прога на С++ и Билдере в частности. Так что я разницы не знаю просто.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0938 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.