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

无标题窗口拖动:

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

[cpp] view plaincopy

  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 plaincopy

  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 plaincopy

  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. }  

 

控件拖动:

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


你可能感兴趣的:(窗口拖动,OnNcHitTest)