我们经常看到窗口最大化/最小化时的缩放效果。不幸的是这种效果只能把应用程序缩成应用程序工作栏中的图标,而且表面上似乎没有方法为最小化到托盘区中的程序添加相似的效果。
使用Windows API 函数DrawAnimatedRects可以做到。
这个函数需要窗口的句柄和两个标明起始和结束屏幕坐标的矩形区域。
以下代码说明如何使用这个API函数:
unit TestForm;
interface
uses
Windows, Classes, Forms, Controls, StdCtrls, ExtCtrls;
type
TZoomAction = zaMinimize, zaMaximize);
TfrmTest = class TForm)
procedure FormClose Sender: TObject; var Action: TCloseAction);
procedure FormShow Sender: TObject);
private
{ private declaration }
public
{ public declaration }
end;
var
frmTest: TfrmTest;
implementation
{$R *.DFM}
procedure ZoomEffect theForm: TForm; theOperation: TZoomAction);
var
rcStart: TRect;
rcEnd: TRect;
rcTray: TRect;
hwndTray : hWnd;
hwndChild: hWnd;
begin
{ 寻找系统托盘区的位置}
hwndTray := FindWindow ’Shell_TrayWnd’, nil);
hwndChild := FindWindowEx hwndTray, 0, ’TrayNotifyWnd’, nil);
GetWindowRect hwndChild, rcTray);
{点击用于最大化/最小化,并切换起始/结束}
if theOperation = zaMinimize then
begin
rcStart := theForm.BoundsRect;
rcEnd := rcTray;
end
else
begin
rcEnd := theForm.BoundsRect;
rcStart := rcTray;
end;
{ 以下是关键的部分... }
DrawAnimatedRects theForm.Handle, IDANI_CAPTION, rcStart, rcEnd)
end;
procedure TfrmTest.FormClose Sender: TObject; var Action: TCloseAction);
begin
ZoomEffect Self, zaMinimize);
end;
procedure TfrmTest.FormShow Sender: TObject);
begin
ZoomEffect Self, zaMaximize);
end;
end.
|