MDI窗口问题(不是高手肯定搞不定!!)(300分)

  • 主题发起人 主题发起人 firstboy
  • 开始时间 开始时间
F

firstboy

Unregistered / Unconfirmed
GUEST, unregistred user!
MDI窗口 如果当前子窗口最大化的 切换到其他子窗口会自动最大化!
如何做到切换到其他子窗口时保持原来状态!而且不能有闪烁的动画<-关键(要像Maxthon浏览器中的效果那样)!
{不要用LockWindowUpdate (这样主窗口会闪烁) 和
Perform(WM_SETREDRAW, 0, 0)
...
Perform(WM_SETREDRAW, 1, 0)
RedrawWindow(Handle, PR, 0, RDW_FRAME + RDW_INVALIDATE +RDW_ALLCHILDREN + RDW_NOINTERNALPAINT);
有时候会花屏}
 
这个问题以前碰到过,一直搞不定.
后来,便放弃用MDI了.
 
应该用setwindowpos就搞定你的问题拉!
 
SetWindowPos(Handle, HWND_TOP, left, top, wide, heigth, SWP_SHOWWINDOW);
 
setwindowpos根本不能切换子窗口
 
使用:
使子窗口最大化: ShowWinNoAnimate(MDIChildForm1.Handle, SW_MAXIMIZE);
使子窗口最小化: ShowWinNoAnimate(MDIChildForm1.Handle, SW_MINIMIZE);
使子窗口正常: ShowWinNoAnimate(MDIChildForm1.Handle, SW_NORMAL);
 
setwindowpos根本不能切换子窗口 怎么不能切换???
 
setwindowpos能切换子窗口但是子窗口还是有闪烁! (子窗口是天兰色的)
 
ShowWinNoAnimate在那个单元里面定义的!delphi 6里有吗?
 
从 Forms.pas 中拷过来的,嘿嘿:
procedure SetAnimation(Value: Boolean);
var
Info: TAnimationInfo;
begin
Info.cbSize := SizeOf(TAnimationInfo);
BOOL(Info.iMinAnimate) := Value;
SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0);
end;

procedure ShowWinNoAnimate(Handle: HWnd; CmdShow: Integer);
var
Animation: Boolean;
begin
Animation := GetAnimation;
if Animation then SetAnimation(False);
ShowWindow(Handle, CmdShow);
if Animation then SetAnimation(True);
end;
 
一点不闪烁有些难
 
动画是去掉了!但是还是会闪烁(SW_MAXIMIZE)!
SW_NORMAL没法子窗口
估计是 切换子窗口时 系统会先上个子窗口 设成Restore然后再把下一个子窗口 Max出来
所以看到有闪烁!
 
show每个子窗口前都来一句: Windowstate:=wsMaximized;

记得n年前搞一个系统就是这样处理的[:D]
 
是切换窗口!
Windowstate:=wsMaximized;还是闪烁的!
 
看来大富翁的高手都不来这里了!!!!
 
后退
顶部