如何让MDI子窗口保持最大化状态? ( 积分: 100 )

  • 主题发起人 主题发起人 011101
  • 开始时间 开始时间
0

011101

Unregistered / Unconfirmed
GUEST, unregistred user!
原贴地址:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1513264

问题:如何保证一个MDI子窗口一直最大化 ( 积分:100, 回复:24, 阅读:179 )
分类:Windows API ( 版主:amo, cAkk )
来自:savetime, 时间:2002-12-16 10:44:00, ID:1513264 [显示:小字体 | 大字体]
有多个MDI子窗口同时显示在MDI窗口内,但有一个窗口无论其它子窗口的窗口状态如何都
必须是最大化的。
我通过捕获该窗口的WM_WINDOWPOSCHANGING事件中设置WindowState = wmMaximized可以
部分实现,但如果其它某一子窗口状态成为还原时,该窗口也被还原。
谁能解决这一问题。



来自:shenloqi, 时间:2003-9-21 21:59:00, ID:2190978
很抱歉,最近工作忙,一直没有时间上大富翁.
在我的这个例子中Unit1有以下代码,其中的FormResize代码就是你要的吧

private
{ Private declarations }
FClientInstance,
FPrevClientProc: TFarProc;
procedure ClientWndProc(var Message: TMessage);

procedure TForm1.ClientWndProc(var Message: TMessage);
var
MyDC: hDC;
Ro, Co: Word;
begin
with Message do
case Msg of
WM_ERASEBKGND:
begin
FormResize(nil);
Result := 1; //其实无所谓了
end;
else
Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam,
lParam);
end;
end;

procedure TForm1.FormResize(Sender: TObject);
var
wRect: TRect;
begin
GetWindowRect(ClientHandle, wRect);
if Assigned(Form3) then
begin
Form3.SetBounds(0, 0, wRect.Right - wRect.Left - 4, wRect.Bottom - wRect.Top
- 4);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));
end;




这段代码俺试过还是没效,请问各位高人是什么原因?
 
原贴地址:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1513264

问题:如何保证一个MDI子窗口一直最大化 ( 积分:100, 回复:24, 阅读:179 )
分类:Windows API ( 版主:amo, cAkk )
来自:savetime, 时间:2002-12-16 10:44:00, ID:1513264 [显示:小字体 | 大字体]
有多个MDI子窗口同时显示在MDI窗口内,但有一个窗口无论其它子窗口的窗口状态如何都
必须是最大化的。
我通过捕获该窗口的WM_WINDOWPOSCHANGING事件中设置WindowState = wmMaximized可以
部分实现,但如果其它某一子窗口状态成为还原时,该窗口也被还原。
谁能解决这一问题。



来自:shenloqi, 时间:2003-9-21 21:59:00, ID:2190978
很抱歉,最近工作忙,一直没有时间上大富翁.
在我的这个例子中Unit1有以下代码,其中的FormResize代码就是你要的吧

private
{ Private declarations }
FClientInstance,
FPrevClientProc: TFarProc;
procedure ClientWndProc(var Message: TMessage);

procedure TForm1.ClientWndProc(var Message: TMessage);
var
MyDC: hDC;
Ro, Co: Word;
begin
with Message do
case Msg of
WM_ERASEBKGND:
begin
FormResize(nil);
Result := 1; //其实无所谓了
end;
else
Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam,
lParam);
end;
end;

procedure TForm1.FormResize(Sender: TObject);
var
wRect: TRect;
begin
GetWindowRect(ClientHandle, wRect);
if Assigned(Form3) then
begin
Form3.SetBounds(0, 0, wRect.Right - wRect.Left - 4, wRect.Bottom - wRect.Top
- 4);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));
end;




这段代码俺试过还是没效,请问各位高人是什么原因?
 
在主窗体MDIForm上放一个Panel,Align:=alClient;BevelOuter:=bvNone
把那个永远最大化的窗体上的控件都放到这个Panel上就实现了你要的效果吧。
 
用Panel或Frame应该都可以的。
 
不但是最大化,而且永远是至于最底层,如果可以实现这个就好了,我找了很久,但是没有找到答案.
 
[h2][black]樓上的沒理解俺的意思.[/black][/h2][:)]
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
554
import
I
后退
顶部