zoukankan      html  css  js  c++  java
  • 无边框的对话框的大小拖动实现

    网上收集的:

    void   CMyDlg::OnMouseMove(UINT   nFlags,   CPoint   point)    
      {  
      //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
      if(m_nMyHitTest   ==   20)//当鼠标没有选择拖动类型的时候改变鼠标状态  
      {  
      CRect   rect;  
      CRect   staticRect;  
      this->GetWindowRect(&rect);  
      ScreenToClient(&rect);  
      HCURSOR   hCursor;  
      if(point.x   >   rect.left   &&   point.x   <   rect.right   &&    
      point.y   >   rect.top-FRAME_SPACE   &&   point.y   <   rect.top+FRAME_SPACE)//上边框区域  
      {    
      hCursor   =   AfxGetApp()->LoadStandardCursor(IDC_SIZENS);  
      SetCursor(hCursor);  
      }  
      else   if(point.x   >   rect.left   &&   point.x   <   rect.right   &&    
      point.y   >   rect.bottom-FRAME_SPACE   &&   point.y   <   rect.bottom+FRAME_SPACE)  
      {  
      hCursor   =   AfxGetApp()->LoadStandardCursor(IDC_SIZENS);  
      SetCursor(hCursor);  
      }  
      else   if(point.y   >   rect.top   &&   point.y   <   rect.bottom   &&    
      point.x   >   rect.left-FRAME_SPACE   &&   point.x   <   rect.left+FRAME_SPACE)  
      {  
      hCursor   =   AfxGetApp()->LoadStandardCursor(IDC_SIZEWE);  
      SetCursor(hCursor);  
      }  
      else   if(   point.y   >   rect.top   &&   point.y   <   rect.bottom   &&    
      point.x   >   rect.right-FRAME_SPACE   &&   point.x   <   rect.right+FRAME_SPACE)  
      {  
      hCursor   =   AfxGetApp()->LoadStandardCursor(IDC_SIZEWE);  
      SetCursor(hCursor);  
      }  
      GetDlgItem(IDC_STATIC_SIZE)->GetWindowRect(&staticRect);  
      ScreenToClient(staticRect);  
      if(staticRect.PtInRect(point))  
      {  
      hCursor   =   AfxGetApp()->LoadStandardCursor(IDC_SIZENWSE);  
      SetCursor(hCursor);  
      }  
      }  
      CDialog::OnMouseMove(nFlags,   point);  
      }

    void   CMyDlg::OnLButtonDown(UINT   nFlags,   CPoint   point)    
      {  
      //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
      CRect   rect;  
      CRect   staticRect;  
      this->GetWindowRect(&rect);  
      ScreenToClient(&rect);  
      HCURSOR   hCursor;  
      if(point.x   >   rect.left   &&   point.x   <   rect.right   &&    
      point.y   >   rect.top-FRAME_SPACE   &&   point.y   <   rect.top+FRAME_SPACE)//上边框区域  
      {    
      hCursor   =   AfxGetApp()->LoadStandardCursor(IDC_SIZENS);  
      SetCursor(hCursor);  
      SetCapture();  
      m_bChangeSize   =   TRUE;  
      m_nMyHitTest   =   HTTOP;  
      }  
      else   if(point.x   >   rect.left   &&   point.x   <   rect.right   &&    
      point.y   >   rect.bottom-FRAME_SPACE   &&   point.y   <   rect.bottom+FRAME_SPACE)  
      {  
      hCursor   =   AfxGetApp()->LoadStandardCursor(IDC_SIZENS);  
      SetCursor(hCursor);  
      SetCapture();  
      m_bChangeSize   =   TRUE;  
      m_nMyHitTest   =   HTBOTTOM;  
      }  
      else   if(point.y   >   rect.top   &&   point.y   <   rect.bottom   &&    
      point.x   >   rect.left-FRAME_SPACE   &&   point.x   <   rect.left+FRAME_SPACE)  
      {  
      hCursor   =   AfxGetApp()->LoadStandardCursor(IDC_SIZEWE);  
      SetCursor(hCursor);  
      SetCapture();  
      m_bChangeSize   =   TRUE;  
      m_nMyHitTest   =   HTLEFT;  
      }  
      else   if(   point.y   >   rect.top   &&   point.y   <   rect.bottom   &&    
      point.x   >   rect.right-FRAME_SPACE   &&   point.x   <   rect.right+FRAME_SPACE)  
      {  
      hCursor   =   AfxGetApp()->LoadStandardCursor(IDC_SIZEWE);  
      SetCursor(hCursor);  
      SetCapture();  
      m_bChangeSize   =   TRUE;  
      m_nMyHitTest   =   HTRIGHT;  
      }  
      GetDlgItem(IDC_STATIC_SIZE)->GetWindowRect(&staticRect);  
      ScreenToClient(staticRect);  
      if(staticRect.PtInRect(point))  
      {  
      hCursor   =   AfxGetApp()->LoadStandardCursor(IDC_SIZENWSE);  
      SetCursor(hCursor);  
      SetCapture();  
      m_bChangeSize   =   TRUE;  
      m_nMyHitTest   =   HTBOTTOMRIGHT;  
      }  
      CDialog::OnLButtonDown(nFlags,   point);  
      }  
       
      void   CMyDlg::OnLButtonUp(UINT   nFlags,   CPoint   point)    
      {  
      //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
      BOOL   bChangeStatic   =   TRUE;  
      //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
      if(m_bChangeSize)  
      {  
      m_bChangeSize   =   FALSE;  
      TRACE("OnLButtonUp\n");  
      ::ReleaseCapture();  
      CPoint   CurPoint;  
      CRect     DlgRect;  
      GetCursorPos(&CurPoint);  
      GetWindowRect(DlgRect);  
      CRect   rectTemp,rectTemp1;  
      GetDlgItem(IDC_STATIC_SIZE)->GetWindowRect(&rectTemp);    
      GetDlgItem(IDC_STATIC_SIZE)->GetWindowRect(&rectTemp1);    
      ScreenToClient(rectTemp1);  
      bChangeStatic   =   rectTemp1.PtInRect(point);  
      int   RightWidth   =   DlgRect.right   -   rectTemp.right;  
      int   BottomWidth   =   DlgRect.bottom   -   rectTemp.bottom;  
      int   Width   =   rectTemp.right   -rectTemp.left;  
      int   Hight   =   rectTemp.bottom   -   rectTemp.top;  
       
      if(m_nMyHitTest   ==   HTLEFT)  
      {  
      if(abs(DlgRect.left   -   CurPoint.x)   >   FRAME_SPACE)  
      DlgRect.left   =   CurPoint.x;  
      }  
      else   if(m_nMyHitTest   ==   HTRIGHT)  
      {  
      if(abs(DlgRect.right   -   CurPoint.x)   >   FRAME_SPACE)  
      DlgRect.right   =   CurPoint.x;  
      }  
      else   if(m_nMyHitTest   ==   HTTOP)  
      {  
      if(abs(DlgRect.top   -   CurPoint.y)   >   FRAME_SPACE)  
      DlgRect.top   =   CurPoint.y;  
      }  
      else   if(m_nMyHitTest   ==   HTTOPLEFT)  
      {  
      DlgRect.top   =   CurPoint.y;  
      DlgRect.left   =   CurPoint.x;  
      }  
      else   if(m_nMyHitTest   ==   HTTOPRIGHT)  
      {  
      DlgRect.top   =   CurPoint.y;  
      DlgRect.right   =   CurPoint.x;  
      }  
      else   if(m_nMyHitTest   ==   HTBOTTOM)  
      {  
      if(abs(DlgRect.bottom   -   CurPoint.y)   >   FRAME_SPACE)    
      DlgRect.bottom   =   CurPoint.y;  
      }  
      else   if(m_nMyHitTest   ==   HTBOTTOMLEFT)  
      {  
      DlgRect.bottom   =   CurPoint.y;  
      DlgRect.left   =   CurPoint.x;  
      }  
      else   if(m_nMyHitTest   ==   HTBOTTOMRIGHT)  
      {  
      if(!bChangeStatic)  
      {  
      DlgRect.bottom   =   CurPoint.y;  
      DlgRect.right   =   CurPoint.x;  
      }  
      }  
      MoveWindow(DlgRect);  
      SetRedrawArea(DlgRect);  
      if(!bChangeStatic)  
      {  
      rectTemp.right   =   DlgRect.right   -   RightWidth;  
      rectTemp.left   =   rectTemp.right   -   Width;  
      rectTemp.bottom   =   DlgRect.bottom   -   BottomWidth;  
      rectTemp.top   =   rectTemp.bottom   -   Hight;  
      ScreenToClient(rectTemp);  
      GetDlgItem(IDC_STATIC_SIZE)->MoveWindow(rectTemp);  
      }  
      m_nMyHitTest   =   20; //恢复鼠标为未选择拖动状态  
      }  
      CDialog::OnLButtonUp(nFlags,   point);  
      }

  • 相关阅读:
    无聊,只发两张图……
    LA
    “万能数据库查询分析器”5.04 发布,撰写的相关技术文章达63篇
    HDU 1010Tempter of the Bone(奇偶剪枝回溯dfs)
    uva 10051 Tower of Cubes(DAG最长路)
    uva 103 Stacking Boxes(DAG)
    异步处理(列出所有文件)
    Android开发8:UI组件TextView,EditText,Button
    植物-蔬菜:红菜苔
    植物-蔬菜:菜苔
  • 原文地址:https://www.cnblogs.com/aion111/p/1374904.html
Copyright © 2011-2022 走看看