一个关于MDI子窗体的小疑问,关于子窗体最大化与最小化的问题(200分)

  • 主题发起人 主题发起人 LeonSu
  • 开始时间 开始时间
L

LeonSu

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个MDI FORM中,有两个子窗体A和B,
要求:
1。程序创建时,A也创建;
2。A的状态永远是最大化;
3。永远在B的下层;
4。B要动态创建,但WindowState=wsNormal;
结果:
1,3,4解决,
问题:
当B创建后,A的状态由最大化改成了NORMAL,

解决方法一:
截获A的WM_WindowPosChanged消息,重写它,代码如下:
procedure TForm4.WMWindowPosChanged(var Msg: TWMWindowPosChanged);
begin
inherited;
WindowState:=wsMaximized;
end;
能解决要求2,但新问题产生,A与B切换时,主窗体的客户区有强烈的闪烁。

望各位高手指点一二,在下双手将分送上。
 
已解决了一部份,新问题已搞定了,方法是重载了WM_SIZE消息。
难到是问题太容易了吗?为什么会没人回答!
 
有这么复杂??
 
1.
procedure TFrameForm.FormShow(Sender: TObject);
begin
with TEditForm.Create(Self) do begin
WindowState:=wsMaximized;
Caption:='A';
BorderIcons:=BorderIcons-[biminimize,bisystemmenu]
end;
end;
2. your idea;
3.
procedure TCHILDForm.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
begin
inherited;
if Caption='A' then
Msg.WindowPos.hwndInsertAfter:=1;
end;

4.No problem

闪烁问题,我觉得可以用Lockwindowupdate解决
创建B时
LockWindowUpdate(Handle);
TCHILDForm.Create(Self).WindowState:=wsNormal;
LockWindowUpdate(0);

不知能否满足你的要求
 
TO: menxin
thank's your answer,but when I do as your idea,I don't think it's right,
because the window A 's state changing to NORMAL,NOT MAXIMIZED, I need click B to
let it MAXIMIZED,so can your give me another answer?tks!
My code is:
procedure XXX.WMSize(var msg: TWMSize);
begin
Msg.SizeType=X:{X=Integer}
inherited;
end;
procedure XXX.WMWindowPosChanged(var msg: TWMWindowPosChanged);
begin
inherited;
if WindowState<>wsMaximized then
WindowState:=wsMaximized;
end;

But I am finding another best road.
 
不好意思!各位,我自己搞定了这个问题。
 
后退
顶部