想做个仿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
累坏了,散点分安慰一下

解决方案 »

  1.   

    请问作者:你的这个winform程序,用什么做的?用net的话怎么不需要netfreamwork支持啊我不太懂,请解答
      

  2.   

    感觉自动隐藏做的不错
    不过只是有exe,没.h,.c/.cpp
      

  3.   

    你的这个winform程序,用什么做的?用net的话怎么不需要netfreamwork支持啊我不太懂,请解答
    ==================================
    是用MFC 写的 ==================
    感觉自动隐藏做的不错
    不过只是有exe,没.h,.c/.cpp=======================
    由于刚完成代码还没整理,而且还有些特性和功能想继续
    完善,所以暂时不发源代码,弄好了再考虑发布
      

  4.   

    有很多人不喜欢用到Timer
    看到我上面提到的第9点,除非你用全局鼠标钩子,否则非Timer不可,
    而后者更好控制,也方便操作;
      

  5.   

    http://www.codeproject.com/buttonctrl/CCaptionButton.asp
    希望早日看到大作完成.
      

  6.   

    抽屉效果,网上有
    http://bbs.msproject.cn/default.aspx?g=posts&t=306
      

  7.   

    源代码已经发布
    http://community.csdn.net/Expert/topic/5719/5719577.xml?temp=4.755801E-02breakind(冰舞,把练街舞的精神拿来编程,必有所成.) ( ) 
    还是有很多没有考虑到的,而且你仅仅是做了自动隐藏的,关键是抽屉=================================================
    你是指从显示到收缩,和从收缩到显示那个过程吗,
    我现在已经实现了,但已经发布的还没加进这个特性
      

  8.   

    hehe
    只管接了..LZ不错...
    也没必要完全象QQ的...自己觉得很不错了 就OK拉..
      

  9.   

    超强仿QQ自动伸缩界面 v2.0更新:1.采用全新的逻辑判断,去掉冗余的BOOL变量,去掉WM_MOVE的消息响应,
      使代码结构更清晰,更简洁;
    2.增加抽屉效果;
    3.调整收缩和显示时边缘位置的值.下载地址:
    http://bbs.msproject.cn/default.aspx?g=posts&t=363
    http://download.csdn.net/source/231992