Динамически создаваемые окна
Добавлено: Ср янв 30, 2008 8:47 pm
Как вероятно все успели заметить, в программе есть диалоговые окна, которые всегда находятся поверх тех окон, с которых их вызвали, а также есть окна, которые отделены от главного окна. Например окно прогресса копирования имеет свою кнопку в панели задач и позволяет переключаться между собой и главным окном программы через Alt+TAB, это же относится к окну Universal Viewer и окну отчета о копировании. Для того чтобы такие окна имели отдельную кнопку в панели задач используется вот такой код при создании окна:
Для Deplhi это выглядит так:
Проблема состоит в том, что если из такого окна некое новое диалоговое окно вызвано через ShowModal(), то модальное окно убирает вызвавшее его окно за главное окно программы. Это можно увидеть если в окне прогресса копирования нажать отмену, появившееся окно с вопросом о том, что нужно отменить, будет находиться вроде как поверх главного окна программы, а окно прогресса уйдет за главное. При этом через Alt+TAB не удастся переключиться к главному окну.
То есть как должно быть: динамически созданное окно должно иметь кнопку в панели задач и при этом чтобы была возможность переключаться между этим динамически созданным окном и создавшим его окном через Alt+TAB (и соответственно через кнопки в панели задач), причем когда динамическое окно вызывает модальное диалоговое окно чтобы само оно не уходило за главное и при этом можно было бы переключаться между главным окном и связкой динамического с модальным через Alt+TAB.
Если кто знает как это сделать в C++ Builder (или хотя бы в Delphi), то я буду весьма признателен за помощь в этом вопросе (очень желателен пример и его исходный код). [/color]
Код: Выделить всё
void __fastcall Twindow_name::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.ExStyle |= WS_EX_APPWINDOW;
Params.WndParent = 0;
}
Код: Выделить всё
procedure Twindow_name.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := 0;
end;
То есть как должно быть: динамически созданное окно должно иметь кнопку в панели задач и при этом чтобы была возможность переключаться между этим динамически созданным окном и создавшим его окном через Alt+TAB (и соответственно через кнопки в панели задач), причем когда динамическое окно вызывает модальное диалоговое окно чтобы само оно не уходило за главное и при этом можно было бы переключаться между главным окном и связкой динамического с модальным через Alt+TAB.
Если кто знает как это сделать в C++ Builder (или хотя бы в Delphi), то я буду весьма признателен за помощь в этом вопросе (очень желателен пример и его исходный код). [/color]