如何做网络蚂蚁的拖放窗口?(200分)

  • 主题发起人 主题发起人 pino
  • 开始时间 开始时间
P

pino

Unregistered / Unconfirmed
GUEST, unregistred user!
难点是如何让拖放窗口始终浮在顶层,而不管主窗口的位置,就象不相关的两个窗口
 
利用setwindowpos api函数,
BOOL SetWindowPos(
HWND hWnd, // handle to window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning options
);
其中设定hwndInsertAfer为HWND_TOPMOST
 
》》难点是如何让拖放窗口始终浮在顶层,而不管主窗口的位置,就象不相关的两个窗口

主窗口如果最小化,子窗口会同时最小化。也即被隐藏。
解决办法是结合以下几个步骤:

1,新的子窗口需要设置父窗口为DESKTOP:
.....
.....
public
{ Public declarations }
procedure CreateParams(var Params:TCreateParams);override;
.....
.....
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent:=getdesktopwindow;//***
end;

2,子窗口的FromStyle是fsStayOnTop

3,在子窗口的ONSHOW事件里:
ShowWindow(Application.Handle, SW_HIDE);
这样,主窗口在任务栏的按钮即隐藏,而只保留子窗口的任务栏按钮.

4.在子窗口关闭时:
ShowWindow(Application.Handle, SW_SHOW);
恢复主窗口的任务栏按钮.
 
接受答案了.
 
后退
顶部