急需解决:关于MDI,100分不够再要!(100分)

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

llockf

Unregistered / Unconfirmed
GUEST, unregistred user!
在开发MDI程序时,怎样才能使子窗体的系统菜单(即它最大化后'-'和'x'按钮)位于coolbar或toolbar下?
 
在窗口消息 SC_MAXIMIZE 中进行适当处理:
Form1 是MDI主窗口,Form2 是MDI子窗口。
Toolbar1 是Form1 中的工具栏。

type
TForm2 = class(TForm)
procedure WndProc(var Message: TMessage); override;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.DFM}

{ TForm2 }

{ TForm2 }

procedure TForm2.WndProc(var Message: TMessage);
begin
if message.wParam=SC_MAXIMIZE then
begin
top:=0;
left:=0;
width:=form1.clientwidth-4;
height:=form1.clientheight-form1.toolbar1.height-4;
end
else
inherited;
///
end;

 
jsxjd,你好!我在 if message.wParam=SC_MAXIMIZE then 后加入showmesage,没有反应,说明不执行到这里,那么消息处理也没用,请问怎么回事?
 
这是我调试通过的,这个方法是在子窗口中的!!
我一开始就是加showmessage的,通过的才发的。
子窗口中的以下声明有吗?

procedure WndProc(var Message: TMessage); override;
 
没错,是那样声明的!
 
他说的方法不行的!
 
我记得原来我解决一个相似问题的方法是
在MDI子窗口中加入
procedure Form1.WMWindowPosChanging(var Message: TMsg); message WM_WINDOWPOSCHAING;
再改写WindowPos结构中的窗体位置。
typedef struct _WINDOWPOS { // wp
HWND hwnd;
HWND hwndInsertAfter;
int x;
int y;
int cx;
int cy;
UINT flags;
} WINDOWPOS;

或WMWindowPosChanged事件中改变窗口大小。
你按这个思路试一下。但我对你提的这个要求感到不能理解。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
544
import
I
后退
顶部