VC++无标题窗口以及控件拖动的方法(修正)

来源:互联网 发布:遗传算法优化svm参数 编辑:程序博客网 时间:2024/05/17 08:37

无标题窗口拖动:

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

[cpp] view plaincopyprint?
  1. UINT CMainFrame::OnNcHitTest(CPoint point)   
  2. {  
  3.  RECT rectWindows, rectClient;  
  4.  this->GetWindowRect(&rectWindows);  
  5.  this->GetClientRect(&rectClient);  
  6.    
  7.  if (point.y > rectWindows.top && point.y < rectWindows.top + 25)  
  8.  {  
  9.   return HTCAPTION;//标题栏形式  
  10.  }  
  11.  else  
  12.  {  
  13.   return CFrameWnd::OnNcHitTest(point);  
  14.  }  
  15. }   

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

 

[cpp] view plaincopyprint?
  1. void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)   
  2. {  
  3.     if (point.y < 26)  
  4.         PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));  
  5.       
  6.     CDialog::OnLButtonDown(nFlags, point);  
  7. }   


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

[cpp] view plaincopyprint?
  1. void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)  
  2. {  
  3.  // TODO: Add your message handler code here and/or call default  
  4.        static CPoint PrePoint = CPoint(0, 0);  
  5.        if(MK_LBUTTON == nFlags)  
  6.        {  
  7.              if(point != PrePoint)  
  8.              {  
  9.                     CPoint ptTemp = point - PrePoint;  
  10.                     CRect rcWindow;  
  11.                     GetWindowRect(&rcWindow);  
  12.                     rcWindow.OffsetRect(ptTemp.x, ptTemp.y);  
  13.                     MoveWindow(&rcWindow);  
  14.                     return ;  
  15.               }  
  16.   
  17.        }  
  18.   
  19.        PrePoint = point;  
  20.        CDialog::OnMouseMove(nFlags, point);  
  21. }  

 

控件拖动:

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

原创粉丝点击