任务栏隐藏的实质
来源:互联网 发布:raphael.js 下载 编辑:程序博客网 时间:2024/05/01 17:56
众所周知,Windows的任务栏可以设定成自动隐藏,这样任务栏将只在需要的时候显示出来,而其它时间则隐藏起来,通常这样做可以为我们提供更大一点的工作空间。那么任务栏的隐藏是如何实现的呢?是否与我们通常情况隐藏窗口时采用不显示窗口的手法一致呢?
其实之所以提出以上问题,是由于在尝试识别当前任务栏状态的时候碰到了问题。按照通常的想法,如果想要识别任务栏是否处于显示状态,可以通过FindWindow先取得任务栏的窗口句柄,然后根据窗口句柄调用函数IsWindowVisible就可以取得当前任务栏的状态了。
根据上述思路识别任务栏当前是否显示的代码如下:
HWND hWnd = ::FindWindow("Shell_TrayWnd", NULL);
BOOL bSheTraVis = ::IsWindowVisible(hWnd);
注意:FindWindow的第一个参数是类名或窗口名,这里的“Shell_TrayWnd”表明要查找的窗口是任务栏。
然而运行上述代码并跟踪IsWindowVisible的返回值bSheTraVis,可以发现无论任务栏是处于显示状态还是隐藏状态,其值均为1(即真)。这个测试结果证明任务栏的隐藏与普通窗口的隐藏并不太一样。那么除了不在屏幕上显示窗口以外还有什么方法可以实现窗口的隐藏呢?我能够想到的只有一种办法,那就是窗口虽然显示了,但是它却显示在屏幕之外!为了验证这个猜想,可以尝试取得隐藏之后的任务栏的位置,相关代码如下:
CRect rcShellTray;
HWND hWnd = ::FindWindow("Shell_TrayWnd", NULL);
::GetWindowRect(hWnd,&rcShellTray);
在屏幕分辨率为1024*768的机器上运行上述测试代码并跟踪取得的rcShellTray值,可以发现rcShellTray中的数据如下:
top: 766 bottom: 800 left: 0 right: 1024
bottom值为800说明任务栏的底端在屏幕之外,而top值为766说明任务栏在隐藏时任务栏的顶边其实还是在屏幕范围之内的。之所以没有将top值也设定到屏幕之外,我猜想是因为当我们将鼠标移到屏幕底端时任务栏需要监测到鼠标到达底端以便显示任务栏。
所以,任务栏的隐藏其实并不是真正隐藏了窗口,而只是将任务栏显示在了屏幕之外而已。知道了这些以后,就可以利用它实现一些需要的功能。例如,将以下代码置于窗口的OnInitDialog函数中,就可以在屏幕右下角显示该窗口,但是如果任务栏处于正常显示状态时,它将显示于任务栏之上,而不会与任务栏之间产生遮盖现象。
欢迎访问梦断洒醒的博客http://www.yanzhijun.com
- 任务栏隐藏的实质
- 任务栏隐藏的实质
- 隐藏任务栏上的图标
- 隐藏程序的任务栏图标
- 隐藏任务栏上的程序
- WINCE 任务栏的显示隐藏
- 任务栏的隐藏与显示
- 隐藏任务栏的开始菜单、托盘
- WINCE 任务栏的显示隐藏
- 隐藏任务栏
- 隐藏任务栏
- 隐藏任务栏
- WinCE下隐藏系统任务栏的方法
- 如何隐藏应用程序的任务栏图标zz
- WinCE任务栏的显示与隐藏
- 隐藏窗口和任务栏图标的实现
- 关于WinCE 隐藏任务栏的总结
- 使Windows 任务栏自动隐藏的方法
- fedora12 下安装飞信
- install kde on ubuntu 9。04
- 杂交测序(SBH)
- 蓝屏
- C++ 初学者指南 第二篇(6)
- 任务栏隐藏的实质
- cvarray错误异常
- 用 CRC32 算法实现程序自校验
- asp.net页面生命周期也称执行顺序
- Ubuntu MP3播放器列表乱码
- 花魂
- UML中的几个关系
- 第4章 SNMP网络管理体系结构
- Eclipse SVN + Google code 搭建自己的代码仓库(转)