如何实现双击程序托盘图标弹出或者弹入动画效果
忙碌时知道休闲的幸福
休闲时却不知忙碌的幸福
使用API:
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; }
注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/2091.html
如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:)
我们不要
A B C D E