3

如何最大化仅适合客户区而不适合整个父窗口的子窗口?我不希望子窗口在主菜单或父窗口的其他控件下消失。

我有这个代码

procedure WMSIZE(var Msg: TMessage); message WM_SIZE;

procedure TForm2.WMSIZE(var Msg: TMessage);
begin
  inherited;
  if Msg.WParam = SIZE_MAXIMIZED then
  begin
    ShowWindow(Handle, SW_RESTORE);
    Left := 0;
    Top := 0;
    Width := Form1.ClientWidth - 4; // The BORDER
    Height := Form1.ClientHeight - 4;
  end;
end;

但这还不够好。窗口实际上没有最大化。如果要更改SW_RESTORE为,SW_MAXIMIZE则子窗口看起来有问题。

4

1 回答 1

2

通常,MDI 主窗体的客户空间应该自动计算到没有菜单或栏的空间,前提是这些栏与窗体的边缘对齐。

当条形图或其他控件未对齐时,您确实必须调整自己。处理WM_NCCALCSIZE告诉窗口您的表单有偏离客户端矩形尺寸。

或者查看NLDExtraMDIProps,我在其中了解WM_SYSCOMMAND何时WParam and $FFF0 = SC_MAXIMIZE调整 MDI 子窗口的大小。该组件提供了一些额外的属性,例如:BackgroundPicture、CleverMaximizing、ShowClientEdge 和 ShowScrollBars。

于 2012-02-24T11:36:41.623 回答