C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Дочерние окна
idhas
Отправлено: 21.12.2005, 11:59


Ученик-кочегар

Группа: Участник
Сообщений: 17



Есть такая проблема. Нельзя закрыть дочернее окно (в билдере или везде, не знаю), т.е. оно просто сворачивается. Если делать на OnClose ф-цию АПИ DestroyWindow(), то при вызове окна его приходится полностью создавать, т.е. Application->CreateForm(__classid(TFDishesList), &FDishesList);. В результате может быть создано несколько окон (дочерних, т.к. у них стиль fsMDIChild). Ну и собственно как от этого избавиться? Может быть есть другой способ закрытия или еще что-то. Заранее спасибо.
idhas
Отправлено: 21.12.2005, 14:16


Ученик-кочегар

Группа: Участник
Сообщений: 17



В принципе, сделал так:
QUOTE

bool exist=false;
for(int i=0; i<.MDIChildCount; i++)

if (MDIChildren[i]->ClassName().operator AnsiString()=="TFCustomers") { exist=true; break; }

if (!exist) Application->CreateForm(__classid(TFCustomers), &FCustomers);
//else

Однако, есть ф-ция API, которая возвращает HWnd дочернего окна указанного класса, может кто-то знает, что за функция и как работает?
Знаю, что есть FindWindowEx, но вроде бы на NT не работает...
Или что-то не так делаю...

Отредактировано idhas — 21/12/2005, 14:22
Guest
Отправлено: 21.12.2005, 15:25


Не зарегистрирован







А почему оно просто сворачивается ?
Если вы сделаете дочернему окну Child->Close(); то оно закроется.
Guest
Отправлено: 21.12.2005, 15:27


Не зарегистрирован







А дочерние окна лучше создавать

//--- create a new MDI child window ----
Child = new TMDIChild(Application);

а не через Application->CreateForm
Gal
Отправлено: 21.12.2005, 15:52


Станционный диспетчер

Группа: Участник
Сообщений: 124



Закрытие дочернего окна
CODE

void __fastcall TFormChild::FormClose(TObject *Sender,
     TCloseAction &Action)
{
 Action = caFree;
}

Вернуться в Вопросы программирования в C++Builder