MDI主窗口导航图上放了按钮,怎样隐藏在子窗口下(100分)

  • 主题发起人 主题发起人 KenLee
  • 开始时间 开始时间
K

KenLee

Unregistered / Unconfirmed
GUEST, unregistred user!
打开子窗口时发现按钮在屏幕最上面,烦!
 
做一个BACK子窗口,按钮放到子窗口上,再处理一下这个子窗口,,,
 
按钮放在子窗口上吧。我没成功将它放在下面,关注。学习
 
提供有用例程、源代码能得分
 
放一个PANEL,把你的按钮等控件放上去,然后:

procedure TForm1.FormCreate(Sender: TObject);
begin
Windows.SetParent(Panel1.Handle,Self.ClientHandle);
Panel1.SendToBack;
end;

很简单吧。
 
Panel得到焦点又跑到上面来了,不太好!
 
就算Panel可以,那导航图怎么办,放panel上?
 
问题如下解决,但是当用户区动态变小时(一个Panel变成Visible),图片严重闪烁。
procedure TBBMainFrm.DrawStretched;
// This procedure stretches the image on the form's client area
var
CR: TRect;
begin
GetWindowRect(ClientHandle, CR);
StretchBlt(FDrawDC, 0, 0, CR.Right, CR.Bottom,
Image1.Picture.Bitmap.Canvas.Handle,
0, 0,Image1.Picture.Width, Image1.Picture.Height,
SRCCOPY);
end;

procedure TBBMainFrm.ClientWndProc(var Message: TMessage);
begin
case Message.Msg of
WM_ERASEBKGND:
begin
CallWindowProc(FOldClientProc,
ClientHandle,
Message.Msg,
Message.wParam,
Message.lParam);
FDrawDC := TWMEraseBkGnd(Message).DC;
DrawStretched
Message.Result := 1;
end;

WM_VSCROLL, WM_HSCROLL:
begin
Message.Result := CallWindowProc(FOldClientProc,
ClientHandle,
Message.Msg,
Message.wParam,
Message.lParam);
InvalidateRect(ClientHandle, nil, True);
end;
else
Message.Result := CallWindowProc(FOldClientProc, ClientHandle,
Message.Msg,
Message.wParam,
Message.lParam);
end;
end;

procedure TBBMainFrm.CreateWnd;
begin
inherited CreateWnd;
FNewClientProc := MakeObjectInstance(ClientWndProc);
FOldClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FNewClientProc));
end;
 
100分请高手解决图片闪烁问题
 
一个方法:如果按钮的位置在窗口内,你就把那个按钮隐藏了。
另一个方法:自己画一个区域作为按钮(繁,但是应该可行)。
 
我也想知道
 
听。。。。
 
多人接受答案了。
 
form1.doublebuffer:=true;
 

Similar threads

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