MFC无边窗体的移动

    CRect rcDialog;//创建对象
    GetClientRect(&rcDialog);//创建区域并赋予对话框
    CRgn rgn;
    
    
    //rgn.CreateEllipticRgn (0,0,rcDialog.Width(),rcDialog.Height());//创建圆形或椭圆形“region”。
    rgn.CreateRoundRectRgn(0 , 0 , rcDialog.Width( ) , rcDialog.Height( ),rcDialog.Width()-50,rcDialog.Height()-50);//创建圆角矩形“region”
    //rgn.CreateRectRgn( 0, 0, rcDialog.Width(), rcDialog.Height()); //创建矩形的“region”。
     //rgn.CreatePolygonRgn(pt, //LPPOINT lpPoints
                     // rcDialog.Width(), //int nCount
                     //rcDialog.Height()); //创建多边形“region”。int nMode 



    //设置区域
    SetWindowRgn( (HRGN) rgn ,TRUE );

 

 

方法一:直接在OnNcHitTest中虚拟发送HTCAPTION消息

    UINT CMainFrame::OnNcHitTest(CPoint point)   
    {  
     RECT rectWindows, rectClient;  
     this->GetWindowRect(&rectWindows);  
     this->GetClientRect(&rectClient);  
       
     if (point.y > rectWindows.top && point.y < rectWindows.top + 25)  
     {  
      return HTCAPTION;//标题栏形式  
     }  
     else  
     {  
      return CFrameWnd::OnNcHitTest(point);  
     }  
    }   
View Code

方法二:直接在OnLButtonDown中虚拟发送WM_NCLBUTTONDOWN,HTCAPTION消息

    void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)   
    {  
        if (point.y < 26)  
            PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));  
          
        CDialog::OnLButtonDown(nFlags, point);  
    }   
View Code

方法三:通过在OnMouseMove中手动进行处理

    void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)  
    {  
     // TODO: Add your message handler code here and/or call default  
           static CPoint PrePoint = CPoint(0, 0);  
           if(MK_LBUTTON == nFlags)  
           {  
                 if(point != PrePoint)  
                 {  
                        CPoint ptTemp = point - PrePoint;  
                        CRect rcWindow;  
                        GetWindowRect(&rcWindow);  
                        rcWindow.OffsetRect(ptTemp.x, ptTemp.y);  
                        MoveWindow(&rcWindow);  
                        return ;  
                  }  
      
           }  
      
           PrePoint = point;  
           CDialog::OnMouseMove(nFlags, point);  
    }  
View Code

控件拖动:

控件拖动只能采用上述的第三种方法

转载于:https://www.cnblogs.com/Ricezhang/articles/3964023.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值