其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
制做像QQ那种自动停靠.自动收缩的窗口.

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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);

        }

<完成>




相关文章

相关软件