创建两个窗口,要求子窗口也能显示在任务栏中,可以切换(100分)

  • 主题发起人 主题发起人 yb33
  • 开始时间 开始时间
Y

yb33

Unregistered / Unconfirmed
GUEST, unregistred user!
创建两个窗口,要求子窗口也能显示在任务栏中(不是右下角),可以在主窗口和子窗口之间切换。当前我是这样解决的
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.ExStyle |= WS_EX_APPWINDOW;
Params.WndParent = GetDesktopWindow();
}
但是有个问题,如果我在Form1中打开OpenDialog或以ShowModal方式打开另外的窗体,则Form1就隐藏不见了,ShowMessage可以这样解决:
MessageBox(Handle,Msg,Caption,MB_YESNOCANCEL);
如果去掉 Params.WndParent = GetDesktopWindow();
就没有上面这个问题,但是又出新问题了。如果以ShowModal方式打开另外的窗体Form2,切换到别的窗体,再切换回来就看不见Form2,且Form1失去焦点。
我再把我想要的效果说清楚。举个例子,大家都常用MSN吧。
双击一个联系人就Show一个窗体,且标题出现在任务栏,可以点击这些标题在多个联系人间切换。
在每个联系人的窗体Form1上,点“邀请某人到对话”就ShowModal一个窗体Form2,Form2不在任务栏中出现标题。此时Form1显示在Form2的背后,如果切换到别的联系人窗体,再切换回来,Form2仍可见且显示在Form1的前面。
在每个联系人的窗体Form1上,点“发送文件或照片”,显示一个OpenDialog,这个OpenDialog的显示效果同上面的Form2.
我摸索了好久,查了好多地方,还是没解决。哪位老兄知道如何解决这个问题?请指教。
 
动态连接库中包含窗体时,如果不将DLL的Application.Handle设置为主程序的Handle,就会在任务栏上出现两个窗口。希望这对你解决问题有帮助。
 
用 Form 的 Create 方法自创建窗口, Create 的 parent 参数设成 nil 就可以了。
 
procedure TForm1.OnCreate(...)
begin
Form2:=TForm2.Create(nil);
...
end;
 
后退
顶部