模仿前最重要的一步就是观察,经过半天对QQ的摆弄和摸索,总结出了以下一些特点:
1、窗口开始粘附时,检测的是鼠标坐标与桌面边界的距离,特别地,粘附在下面的时候,检测的是与任务栏的距离;
2、在向上移动窗口时,窗口边界永远不会超出桌面上面边界;
3、窗口是个TopMost风格;
4、当窗口粘附在上面、左边或右边并显示时,你把鼠标移动到最顶端,光标变成改变窗口大小的图标,而单单是把窗口的top坐标设置为0是不行的;
5、粘附在下面的时候,当处于移动状态,那么窗口的底边是与任务栏顶边对齐的,但从隐藏到显示的时候,窗口的底端是与屏幕底边对齐的;
6、隐藏后显露出来的那条线可能是一个Border,但肯定的是绝不包含Client区域;
7、关于响应鼠标的进入与移出窗口,绝对不是WM_MOUSEMOVE、WM_MOUSELEAVE。证明:你以及其慢的速度接触隐藏状态的QQ边界,你会发现几乎是“一触即发”,你又以及其慢的速度移出显示状态的QQ,你会发现它的收缩反而不是“一触即发”的,而是离边缘10象素左右。而WM_MOUSEMOVE,WM_MOUSELEAVE,只有在进入、移出Client区域才响应,明显和QQ不同,其实从第6点也可以知道;
8、粘附在两边的时候,高度会调整为桌面上边界到任务栏下边界的距离;
9、在“拖动时显示窗口内容”模式下(桌面属性-外观-效果),粘附在两边的拖动出来时;如果收缩之前高度比收缩后小则回复原来高度,在非“拖动时显示窗口内容”模式下,光栅会回复原来高度,但释放左键时,高度却是收缩时调整后的高度,一开始我以为这是个BUG,但我编写时同样出现这个问题,发现这两种模式会影响WM_MOVING参数的意义;
10、粘附在两边的时候当你设置任务栏自动隐藏,QQ窗口会自动调整高度充满屏幕高度;
11、窗口显示或隐藏不是一瞬间的,这点在第9点提到的两种模式下,会有所不同;
12、任务栏并不显示QQ窗口;
二、编写代码
观察完毕,就开始编写了。
首先新建一个基于对话框的MFC程序,命名为QQHideWnd,在对话框属性的styles页把border改为Resizing,你也可同时把Entended styles 的 tool window 钩上,对于这点我在程序了动态修改了。
【VisualC++设计超强仿QQ自动伸缩窗口(1)】相关文章:
Vb中控件的自动排列03-23
广西壮族自治区财政厅会计继续教育报名登录入口:https://czt.gxzf.gov.cn/kjgl/03-23
运动主题团日活动策划03-23
2023年广东梅州中考成绩查询时间及查分入口[7月7日起]03-23
2024年江苏中级导游等级考试准考证打印时间及入口(11月18日9:00起)03-23
2020年高级会计师《高级会计实务》知识点:社会融资方式03-23
英语口语话题:开立账户03-23
计算机应用技术英语简历范文大全03-23
党员四风问题自查材料03-23
高一叙事作文:雨伞下的触动_800字03-23
考试大:会计-支票英语用语03-23
