| 查看: 122 | 回复: 0 | |||
| 当前主题已经存档。 | |||
zsglly木虫 (著名写手)
|
[交流]
得到托盘区位置与动态显示/隐藏窗口
|
||
|
现在的软件很多都使用了系统托盘区来放置图标,而隐藏了窗口。通常是在托盘区的图标上点击时显示出窗口,本文介绍的方法可以为你窗口的显示增加动画效果到达美化界面的目的。 准备工作1 熟悉一个API函数DrawAnimatedRects,这个函数可以在你指定的两个矩形间以动画的效果画出一个移动的窗口,一个例子就是窗口在最大化/最小化时的动画效果,函数原型如下: BOOL WINAPI DrawAnimatedRects ( HWND hwnd, // 窗口句柄 int idAni, // 动画效果标记,保留并只能为0 CONST RECT *lprcFrom, // 起始窗口矩形 CONST RECT *lprcTo // 结束时窗口矩形 ); 准备工作2 找出托盘区图标所在的位置。我们使用FindWindow来找到底部的任务条窗口,然后通过列举子窗口的方法来找到托盘区窗口,任务条窗口的类名是“Shell_TrayWnd”,托盘区窗口的类名是TrayNotifyWnd。 BOOL CALLBACK FindTrayWnd(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; } CRect GetTrayWndRect() { CRect rect(0,0,0,0); // 查找托盘窗口 CWnd* pWnd = FindWindow(_T("Shell_TrayWnd" , NULL); if (pWnd) { //通过列举子窗口来进行查找 EnumChildWindows(pWnd->m_hWnd, FindTrayWnd, (LPARAM)&rect); pWnd->GetWindowRect(rect); //rect 为托盘区矩形 } return rect; } 下面伪代码的显示了如何动态的显示和隐藏窗口。 rect_tray = find_tray_rect(...) rect_from = window.getCurrentRect(...) rect_to = rect_tray call DrawAnimatedRects(...) [ Last edited by 幻影无痕 on 2006-11-27 at 08:14 ] |
» 猜你喜欢
同年申请2项不同项目,第1个项目里不写第2个项目的信息,可以吗
已经有6人回复
依托企业入选了国家启明计划青年人才。有无高校可以引进的。
已经有6人回复
依托企业入选了国家启明计划青年人才。有无高校可以引进的。
已经有10人回复
天津大学招2026.09的博士生,欢迎大家推荐交流(博导是本人)
已经有9人回复
有院领导为了换新车,用横向课题经费买了俩车
已经有10人回复
遇见不省心的家人很难过
已经有24人回复
AI 太可怕了,写基金时,提出想法,直接生成的文字比自己想得深远,还有科学性
已经有6人回复
酰胺脱乙酰基
已经有13人回复
有时候真觉得大城市人没有县城人甚至个体户幸福
已经有10人回复














) == 0)
回复此楼