![]() |
|
||||||||||||||
| | 网站首页 | 数据库教程 | web编程 | 服务器 | 程序设计 | | ||
|
||
|
|||||||
| 得到托盘区位置与动态显示/隐藏窗口 | |||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2007-7-31 ![]() |
|||||||
|
下载本文所附源代码
准备工作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(...)
|
|||||||
| 文章录入:admin 责任编辑:admin | |||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||||
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 网站地图 | 管理登录 | | |||
|