函数原型:
BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags)
函数功能:
能在窗口打开或者隐藏时产生动画效果。
参数含义:
hWnd:指定产生动画效果的窗口句柄。
dwTime:指明动画持续时间(以毫秒计算),动画的标准时间应该为200毫秒。
dwFlags:指定动画类型。这个参数可以是一个或者多个标志的组合。以下是该参数的取值:
AW_SLIDE:使用滑动类型。缺省则为滚动类型。当使用AW_CENTER标志时,这个标志被忽略。
AW_ACTIVATE:激活窗口。在使用了AW_HIDE标志后不能使用这个标志。
AW_BLEND:实现淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
AW_HIDE:隐藏窗口,缺省则为显示窗口。
AW_CENTER:若使用了AW_HIDE标志,则使窗口向内重叠,即收缩窗口;若未使用AW_HIDE标志,则使窗口向外扩展,即展开窗口;
AW_HOR_POSITIVE:自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志被忽略;
AW_VER_POSITIVE:自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志被忽略;
AW_VER_NEGATIVE:自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志被忽略;
如果函数调用成功,则返回非零值,否则返回值为零。
BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags)
函数功能:
能在窗口打开或者隐藏时产生动画效果。
参数含义:
hWnd:指定产生动画效果的窗口句柄。
dwTime:指明动画持续时间(以毫秒计算),动画的标准时间应该为200毫秒。
dwFlags:指定动画类型。这个参数可以是一个或者多个标志的组合。以下是该参数的取值:
如果函数调用成功,则返回非零值,否则返回值为零。
在单文档中
/
// CMainFrame message handlers
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
AnimateWindow(GetSafeHwnd(),1000,AW_SLIDE|AW_HOR_POSITIVE);
return 0;
}
void CMainFrame::OnClose()
{
// TODO: Add your message handler code here and/or call default
AnimateWindow(GetSafeHwnd(),1000,AW_HIDE|AW_CENTER);
CFrameWnd::OnClose();
}
在对话框中 需要去掉 句柄即可
BOOL WINAPI DrawAnimatedRects(HWND hwnd, int idAni, CONST RECT * lprcFrom, CONST RECT * lprcTo);
Eg:
Bool m_bShow = false; //区分弹出还是弹入
BOOL WinAnimation()
{
CWnd * pWnd=FindWindow("Shell_TrayWnd",NULL); //windows底部信息提示窗口
if(!pWnd)return FALSE;
CRect rectSur,rectDst;
GetWindowRect(&rectSur); //本窗口大小,用户自己处理
EnumChildWindows(pWnd->GetSafeHwnd(),My_Find,(LPARAM)&rectDst); //寻找托盘
if(m_bShow)DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,&rectSur,&rectDst); //弹入
else DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,&rectDst,&rectSur); //弹出
return TRUE;
}
BOOL CALLBACK My_Find(HWND hwnd, LPARAM lParam)
//寻找托盘位置
{
TCHAR szClassName[256];
GetClassName(hwnd, szClassName, 255);
// 比较窗口类名
if (_tcscmp(szClassName, _T("TrayNotifyWnd")) == 0)
{
CRect *pRect = (CRect*) lParam;
::GetWindowRect(hwnd, pRect);
return TRUE;
}
// 当找到时钟窗口时表示可以结束了
if (_tcscmp(szClassName, _T("TrayClockWClass")) == 0)
{
CRect *pRect = (CRect*) lParam;
CRect rectClock;
::GetWindowRect(hwnd, rectClock);
pRect->right = rectClock.left;
return FALSE;
}
return TRUE;
}
设置透明
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary(L"User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)
fun(this->GetSafeHwnd(),0,200,2);
FreeLibrary(hInst);
}