想做个仿QQ自动收缩界面,在网上搜索了很久很久,
虽然找到了一些,但发现效果不是一般的差;狠心经过了半天的实验和观察,发现QQ有以下细微特点
这些特点好多都是网上仿造程序不完全符合的1.窗口开始粘附时,检测的是鼠标坐标与桌面边界的距离
特别地,粘附在下面的时候,检测的是与任务栏的距离2.向上移动窗口时,窗口边界永远不会超出桌面边界3.窗口是个 TopMost 风格, 从隐藏到显示,他一定是处于激活状态
即使你显示之前点击了其他窗口.4.当他粘附在上面并显示时,你把鼠标移动到最顶端,如果光标变成
改变窗口大小的图标那么你仿造成功
(PS:单单是把窗口的top坐标设置为0是不行的);5.粘附在下面的时候,当处于移动状态,那么窗口的底边是与任务栏顶
对齐的,但处于隐藏又显示的时候,窗口的底端是与屏幕底边对齐的.6.自己留意一下在隐藏后又显示时改变窗口的大小的各种行为,你会
发现很有趣的,然后比较一下自己的程序吧.7.隐藏后显露出来的那条线可能是一个Border,但绝不包含Client区域
8.关于响应鼠标的进入与移出窗口事件,很多人以为是WM_MOUSEMOVE,
WM_MOUSELEAVE,在这里我可以99%肯定这种想法是错的.
证明:你以及其慢的速度接触隐藏QQ的边界,你会发现几乎是"一触即发"
但WM_MOUSEMOVE却慢了一步,只有在进入Client区域才响应;
你又以及其慢的速度移出显示的QQ,你会发现它的收缩反而不是"一
触即发"的,而是离边缘10象素左右,而WM_MOUSELEAVE却是提前触发
(因为他是离开Client区域),这样根本没法在显示状态修改窗口大小,
而QQ是能的;9.粘附在两边的时候,高度会调整为桌面上边界到任务栏下边界的距离;10.在"拖动时显示窗口内容"模式下(桌面属性->外观->效果),粘附在两边的拖动
出来时,如果收缩之前高度比收缩后小则回复原来高度.
在非"拖动时显示窗口内容"模式下,光栅会回复原来高度,但释放左键时,高度
却是收缩时调整后的高度,个人认为这是个BUG,但我编写时同样出现这个问题,
发现这两种模式会影响 WM_MOVE WM_MOVING参数的意义;11.粘附在两边的时候当你设置任务栏自动隐藏,QQ窗口会自动调整高度充满
屏幕高度;12.窗口显示时是缓慢移动出来的 (当然这个花哨功能你可以不实现)13.任务栏并不显示QQ窗口,WS_EX_TOOLWINDOW分隔可以实现,估计他
的最大化最小化关闭按键是自己画的;14.托盘图标 (省了吧)观察完毕,又是半天编写和调试,终于相似度达到90%了(11,12,14未实现),
有空在继续,想看看现在我的成果的话到我的个人资源下载,IDE VC6.0
http://download.csdn.net/source/231291
累坏了,散点分安慰一下
虽然找到了一些,但发现效果不是一般的差;狠心经过了半天的实验和观察,发现QQ有以下细微特点
这些特点好多都是网上仿造程序不完全符合的1.窗口开始粘附时,检测的是鼠标坐标与桌面边界的距离
特别地,粘附在下面的时候,检测的是与任务栏的距离2.向上移动窗口时,窗口边界永远不会超出桌面边界3.窗口是个 TopMost 风格, 从隐藏到显示,他一定是处于激活状态
即使你显示之前点击了其他窗口.4.当他粘附在上面并显示时,你把鼠标移动到最顶端,如果光标变成
改变窗口大小的图标那么你仿造成功
(PS:单单是把窗口的top坐标设置为0是不行的);5.粘附在下面的时候,当处于移动状态,那么窗口的底边是与任务栏顶
对齐的,但处于隐藏又显示的时候,窗口的底端是与屏幕底边对齐的.6.自己留意一下在隐藏后又显示时改变窗口的大小的各种行为,你会
发现很有趣的,然后比较一下自己的程序吧.7.隐藏后显露出来的那条线可能是一个Border,但绝不包含Client区域
8.关于响应鼠标的进入与移出窗口事件,很多人以为是WM_MOUSEMOVE,
WM_MOUSELEAVE,在这里我可以99%肯定这种想法是错的.
证明:你以及其慢的速度接触隐藏QQ的边界,你会发现几乎是"一触即发"
但WM_MOUSEMOVE却慢了一步,只有在进入Client区域才响应;
你又以及其慢的速度移出显示的QQ,你会发现它的收缩反而不是"一
触即发"的,而是离边缘10象素左右,而WM_MOUSELEAVE却是提前触发
(因为他是离开Client区域),这样根本没法在显示状态修改窗口大小,
而QQ是能的;9.粘附在两边的时候,高度会调整为桌面上边界到任务栏下边界的距离;10.在"拖动时显示窗口内容"模式下(桌面属性->外观->效果),粘附在两边的拖动
出来时,如果收缩之前高度比收缩后小则回复原来高度.
在非"拖动时显示窗口内容"模式下,光栅会回复原来高度,但释放左键时,高度
却是收缩时调整后的高度,个人认为这是个BUG,但我编写时同样出现这个问题,
发现这两种模式会影响 WM_MOVE WM_MOVING参数的意义;11.粘附在两边的时候当你设置任务栏自动隐藏,QQ窗口会自动调整高度充满
屏幕高度;12.窗口显示时是缓慢移动出来的 (当然这个花哨功能你可以不实现)13.任务栏并不显示QQ窗口,WS_EX_TOOLWINDOW分隔可以实现,估计他
的最大化最小化关闭按键是自己画的;14.托盘图标 (省了吧)观察完毕,又是半天编写和调试,终于相似度达到90%了(11,12,14未实现),
有空在继续,想看看现在我的成果的话到我的个人资源下载,IDE VC6.0
http://download.csdn.net/source/231291
累坏了,散点分安慰一下
不过只是有exe,没.h,.c/.cpp
==================================
是用MFC 写的 ==================
感觉自动隐藏做的不错
不过只是有exe,没.h,.c/.cpp=======================
由于刚完成代码还没整理,而且还有些特性和功能想继续
完善,所以暂时不发源代码,弄好了再考虑发布
看到我上面提到的第9点,除非你用全局鼠标钩子,否则非Timer不可,
而后者更好控制,也方便操作;
希望早日看到大作完成.
http://bbs.msproject.cn/default.aspx?g=posts&t=306
http://community.csdn.net/Expert/topic/5719/5719577.xml?temp=4.755801E-02breakind(冰舞,把练街舞的精神拿来编程,必有所成.) ( )
还是有很多没有考虑到的,而且你仅仅是做了自动隐藏的,关键是抽屉=================================================
你是指从显示到收缩,和从收缩到显示那个过程吗,
我现在已经实现了,但已经发布的还没加进这个特性
只管接了..LZ不错...
也没必要完全象QQ的...自己觉得很不错了 就OK拉..
使代码结构更清晰,更简洁;
2.增加抽屉效果;
3.调整收缩和显示时边缘位置的值.下载地址:
http://bbs.msproject.cn/default.aspx?g=posts&t=363
http://download.csdn.net/source/231992