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

我有这个代码

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,则子窗口看起来有问题。

最佳答案

通常,MDI主窗体的客户空间应自动计算为不包含菜单或栏的空间,只要这些栏与窗体的边缘对齐即可。

当条形图或其他控件未对齐时,您实际上必须进行调整。处理WM_NCCALCSIZE告诉Windows您的表单的客户矩形尺寸有偏差。

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

关于delphi - Delphi:MDI应用程序中的最大子窗体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9428145/

10-08 22:41