怎样使MDIChild子窗口不被MDIForm窗口中的Image所遮挡?(20分)

  • 主题发起人 主题发起人 netCobra
  • 开始时间 开始时间
N

netCobra

Unregistered / Unconfirmed
GUEST, unregistred user!
近日遇到这样一个问题:
程序中主窗口为一个MDIForm,其余子窗口设为MDIChildForm,出于某些需要,必须要
在主窗口中放置一个Image(比较大,会占据整个窗口),但是这样子带来的问题就是所有
的子窗口都被这个Image给挡住了,折腾了很久也没有办法,最后无奈将主窗口设为Normal,
将所有的子窗口设为Stayontop,但是这样子的问题是打印预览窗口一旦最小化,就再也找
不到了,好像也是被主窗口给挡住了。而打印预览窗口无法控制,不能设为Stayontop,所
以,我真的是没招了... :-(
请教各位大虾,怎么才能使子窗口和Image和平共处?

 
我试了一下,怎么没出现你说的现象呢?你是怎么把图片放到主窗口里的?直接放应该是看
不见的。用很多资料上介绍的方法试试:
private
{ Private declarations }
FClientInstance,
FPrevClientProc : TFarProc;
procedure ClientWndProc(var Message: TMessage);
{$R *.DFM}
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
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;
 
我的Image是放在主窗口的Panel上面的,打开子窗口的时候,看不见子窗口,但是在关闭主
窗口的时候,能看见子窗口一闪而过;
你说的办法我试了一下,不知道什么原因,没有成功
 
想要在主窗口上加背景,用Panel是不行的,如果这样,子窗口就都躲到Panel容器的后面去
了。我上面的方法是可以的,不过要在Image里载入一幅Bmp图片,Jpg图片不行,你再试一次
吧。
 
接受答案了.
 
后退
顶部