如何给MDI主窗口加背景?(100分)

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

liwei

Unregistered / Unconfirmed
GUEST, unregistred user!
FORM1.CANVAS.BRUSH.BITMAP:=....这招不灵。
(据说在95下不灵,可我在98下试也不行。
我用DELPHI 3)

继承CLIENTWND窗口的WM_ERASE...消息的也不灵。
不知道是哪里错了。

最好能给一个调好的有背景的MDI程序。多谢!
 
注意你的信箱,已给你发了个控件。
 
form.brush.bitmap := image1.picture.bitmap; 这个方法没错. 可以实现.
 
FClientInstance, FPrevClientProc : TFarProc;
procedure ClientWndProc(var Message: TMessage);
//定义变量与过程

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

procedure TForm1.ClientWndProc(var Message: TMessage);
var
MyDC:hDC;
Ro,Co:Word;
begin //在窗体上画背景
if message.Msg<>WM_ERASEBKGND then begin
message.Result := CallWindowProc(FPrevClientProc,ClientHandle, message.Msg,message.wParam,message.lParam);
exit;
end;
MyDC := TWMEraseBkGnd(Message).DC;
for Ro := 0 to ClientHeight div Image1.Picture.Height do begin
for Co := 0 TO ClientWIDTH div Image1.Picture.Width do begin
BitBlt(MyDC, Co*Image1.Picture.Width, Ro*Image1.Picture.Height,
Image1.Picture.Width, Image1.Picture.Height,
Image1.Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
message.Result:= 1;
end;
end;

end;
加分吧!!!!!
 
tom518的方法很好,我就是这样用的!
 
to:wuyi 也发一个给我把,hjtbox@126.com ,谢谢!

其实这个问题已经讨论过两次了,我头痛很久了,
form.brush.bitmap := image1.picture.bitmap; 在98下是可以的,
但在95下就不行,据说是因为95下form的bursh的大小是不可变的。

tom518的方法我也用过,但是只有在form是fsNormal时正常,form是
fsmdiform时旧不行罗。:< 望大虾门指点迷津。
 
form.brush.bitmap := image1.picture.bitmap; 这个方法没错.
Delphi 4 win98下可以实现.

 
tom518的方法可行. 注意: 是clienthandle不是handle.
 
tom518的方法可行. 注意: 是clienthandle不是handle.
 
eyes: 用tom518的方法,你在DELPHI 3 + WIN95下试过么?

我试过,还是不行。
 
我终于找到在D3中的实现方法:
将以下三句放到FORM的ONACTIVE事件中,不要放在ONCREATE中. 即可.
FClientInstance:= MakeObjectInstance(ClientWndProc);
FPrevClientProc:= Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));

因为在ONCREATE中ClientHandle=0. 不信的话, 你们自己跟踪一下.

还有DJ的方法也是可行的. 只是我想在背景上再画上一个软件标题,
DJ的方法就不行了.

为感谢ANOTHER_EYES在SEE中的帮助, 加50.
TOM518,DJ 各加25.

多谢各位的帮忙!!!
 
另外, WUYI: 没有收到你的控件. :(
 
多人接受答案了。
 
163信箱很慢的。
 

Similar threads

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