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

  • 主题发起人 主题发起人 tinytao
  • 开始时间 开始时间
T

tinytao

Unregistered / Unconfirmed
GUEST, unregistred user!
我有给MDI主窗口加背景程式的部分,
如下所示:
//--------------------------------------------------------------
由于MDI主窗口的特性,使用普通OnPaint和使用TImage等方法都不会产生作用。
下面将用编写一个简单的MDI程序来介绍如何实现。
第一步:创建一个新的工程。
第二步:将Form1的FormStyle设置为fsMDIForm,设置成MDI的主窗口。
第三步:在Form1上增加一个Image元件,并选择要设置的背景到Image的Picture中。
第四步:在Form1的Private中定义:

FClientInstance,
FPrevClientProc : TFarProc;
PROCEDURE ClientWndProc(VAR Message: TMessage);

第五步:在实现(implementation)中加入上述过程的具体内容:

PROCEDURE TForm1.ClientWndProc(VAR Message: TMessage);
VAR
MyDC : hDC;
Ro, Co : Word;
begin
with Message do
case Msg of
WM_ERASEBKGND:
begin
MyDC := TWMEraseBkGnd(Message).DC;
FOR Ro := 0 TO ClientHeight DIV Image1.Picture.Height DO
FOR Co := 0 TO ClientWIDTH DIV Image1.Picture.Width DO
BitBlt(MyDC, Co*Image1.Picture.Width, Ro*Image1.Picture.Height,
Image1.Picture.Width, Image1.Picture.Height,
Image1.Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
Result := 1;
end;
else
Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam, lParam);
end;
end;

第六步:在Form1的创建事件中加入:
//-----------------------------------------------------------

(到这里就没有了,我不知道要加入些什么,谁能帮我,谢谢。)

 
呵呵,你做得彻底。
不是form.create,应该重载form.createwnd;在这里指向新的clientcreatewnd
全局:
var fo,fn:tfarproc;
.....
begin
inherited createwnd;
fo:=pointer(getwindowlong(clienthandle,gwl_wndproc)); //保存旧的
fn:=makeobjectinstance(clientwndproc);
setwindowlong(clienthandle,gwl_wndproc,longint(fn)); //指向新的
end;

这里的fo 就是你的FPrevClientProc
 
这个问题讨论好几次了,看这里吧
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=335851
 

if FormStyle=fsMDIForm then Tmp_handle:=ClientHandle
else Tmp_handle:=Handle;
FClientInstance:=MakeObjectInstance(ClientWndProc);
FPrevClientProc:=Pointer(GetWindowLong(Tmp_handle, GWL_WNDPROC));
SetWindowLong(Tmp_handle, GWL_WNDPROC, LongInt(FClientInstance));
 
三个答案我都测试了,都可行,所以都有分,
menxin是第一个答案,所以多一分。
谢谢!
 
多人接受答案了。
 

Similar threads

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