制做像QQ那种自动停靠.自动收缩的窗口.

原创 2004年09月30日 17:18:00

1.首先处理自动停靠.
    1).建立一个对话框类CDlg.
    2).
        ///dlg.h
          class CDlg
        {
            private:
                   bool m_isAutoHide; //窗口是否可以自动隐藏
                   bool m_isWinHide; // 窗口是否隐藏
               ...........
        }

      ///dlg.cpp
         .....
    void CDlg::OnMove(int x, int y)
    {
         CDialog::OnMove(x, y);
         
         ///窗口从显示到隐藏时,不做其它操作
        if(m_isWinHide)
         {
              return;
         }
         
         CRect tRect;
         GetWindowRect(tRect);
         if(tRect.top<10)
         {///如果窗口移动后的位置和到屏幕上方的距离小于10
           ///就使窗口停靠到屏幕上方.

              tRect.bottom-= tRect.top;
              tRect.top= 0;
              MoveWindow(tRect);
               ///窗口停靠后就可以自动隐藏
              m_isAutoHide= true;
          }
         else
         {
               ///如窗口没有停靠就不可以自动隐藏
              m_isAutoHide= false;
         }
 
       }

    void CDlg::OnMoving(UINT fwSide, LPRECT pRect)
    {
        if((pRect->top < 10)
          && (!m_isAutoHide) )
        {///如果窗口移动到的位置和到屏幕上方的距离小于10
           ///就使窗口停靠到屏幕上方.

                pRect->bottom-= pRect->top;
                pRect->top= 0;
                m_isAutoHide= true;
        }

        CDialog::OnMoving(fwSide, pRect);
    }
2.处理自动收缩
      //dlg.h
        class CDlg
         {
                .....
                LRESULT  OnMouseLeave( HWND hwnd, UINT msg,
                                              WPARAM  wParam,LPARAM lParam  );
         }

     //dlg.cpp
            BEGIN_MESSAGE_MAP(CDlg, CDialog)
                  ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
            END_MESSAGE_MAP()
      .......

     LRESULT CDlg::OnMouseLeave(HWND hwnd, UINT msg, WPARAM wParam,                                                                   LPARAM lParam  )
        {
             if(m_isAutoHide)
             {
                  CPoint tPoint;
                  GetCursorPos(&tPoint);
                  CRect tRect;
                  GetWindowRect(&tRect);
                  if(!(tRect.PtInRect(tPoint)))
                  {
                      m_isWinHide=true;
                   tRect.top= tRect.top - tRect.bottom +5;
                   tRect.bottom= 5;
                   MoveWindow(tRect);

                   ::SetWindowPos(
                            ::GetDesktopWindow()
                            ,HWND_TOPMOST,tRect.left,tRect.top
                            ,tRect.Width(),tRect.Height    ()
                            ,SWP_SHOWWINDOW);
                 }
            }
      return TRUE;
    }


    void CDlg::OnMouseMove(UINT nFlags, CPoint point)
        {
                 if(m_isWinHide)
                 {
                      CRect tRect;
                      GetWindowRect(&tRect);
                     tRect.bottom+= (tRect.bottom-tRect.top-5);
                     tRect.top=0;
                     MoveWindow(tRect);
                     m_isWinHide= false;
                  }

                    TRACKMOUSEEVENT EventTrack;
                      EventTrack.cbSize= sizeof(TRACKMOUSEEVENT);
                      EventTrack.dwFlags= TME_LEAVE;
                      EventTrack.hwndTrack= this->m_hWnd;
                      _TrackMouseEvent(&EventTrack);

            CDialog::OnMouseMove(nFlags, point);

        }

<完成>

制做像QQ那种自动停靠.自动收缩的窗口,好东西呀,收藏起来,方便以后使用。谢谢了。

制做像QQ那种自动停靠.自动收缩的窗口. (转自:http://blog.csdn.net/hxblvc/archive/2004/09/30/122057.aspx我想使用TrackBacks试试)...
  • sailingcelery
  • sailingcelery
  • 2004年10月01日 11:42
  • 995

C# 实现类似QQ的窗体在桌面边缘停靠和隐藏

设计思路: 1.使用定时器(Timer)来监控鼠标位置和窗体位置,并实现窗体的停靠和隐藏 2.当鼠标拖动窗体时,窗体才有可能根据自身位置决定是否停靠 3.如果窗体四周没有接触到屏幕边缘则不会停靠 4....
  • dufangfeilong
  • dufangfeilong
  • 2014年12月05日 17:23
  • 1774

MFC仿QQ窗口靠边自动收缩隐藏效果(附源代码)

/*在原创的基础上做了*/ 一、【观察】 模仿前最重要的一步就是观察,经过半天对QQ的摆弄和摸索,总结出了以下一些特点: 1、窗口开始粘附时,检测的是鼠标坐标与桌面边界的距离,特别地,粘附在下...
  • u013100446
  • u013100446
  • 2014年12月20日 19:45
  • 1687

窗口自动停靠至屏幕边缘

实现功能:当拖动窗口至屏幕
  • wwkaven
  • wwkaven
  • 2014年06月19日 19:56
  • 964

用程序实现自动给qq好友发窗口抖动

1.首先来个简单点的,抖动本地
  • jjj19891128
  • jjj19891128
  • 2014年05月08日 21:23
  • 3766

QT主窗口的停靠窗口实现

关于停靠窗口,现在我们所见的许多软件都存在停靠窗口,如Visual Studio软件的类视图、属性视图和资源视图都是停靠窗口的实际案例;停靠窗口作为主窗口的一部分,可以停靠、浮动、显示隐藏等; 该博...
  • tian_110
  • tian_110
  • 2015年01月05日 09:31
  • 488

C# 实现像QQ一样隐藏窗体

可以在屏幕四周自动隐藏窗体
  • haoduo123456789001
  • haoduo123456789001
  • 2016年06月22日 15:56
  • 609

Qt实现窗体在显示屏旁边自动隐藏(类似QQ)

Qt实现窗体在显示屏旁边自动隐藏(类似QQ)看群里有人问这个东西,本人先来无事编以自己的想法实现了下: 其实实现的点子很简单:void AutoHideWidget::leaveEvent(QEve...
  • q862343646
  • q862343646
  • 2016年12月09日 10:45
  • 1449

WPF 仿QQ无边框窗体(自动隐藏/可缩放/最大化不覆盖任务栏)

今天做一个综合案例,WPF的仿QQ窗体,贴边自动隐藏,无边框窗体,可拖拽实现缩放,最大化不覆盖任务栏。 无边框窗体缩放,上一篇文章已经介绍了,不过今天使用的方法更简单,不会占用视图的资源,纯代码完成...
  • ryb666666
  • ryb666666
  • 2011年11月17日 16:20
  • 7482

CSS3让div自动收缩及属性选择器

两个css3的实例,一个是对div添加背景图片并让其自动收缩;一个是属性选择器的使用。...
  • bailin710258
  • bailin710258
  • 2013年12月06日 09:06
  • 1475
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:制做像QQ那种自动停靠.自动收缩的窗口.
举报原因:
原因补充:

(最多只允许输入30个字)