收到单击消息后设置一标志;
在mousemoving里面检查该标志,使用setwindowpos()设置窗口位置;

解决方案 »

  1.   

    在MouseDown的时候记录当前位置,MouseMove的时候如果在拖动中,则移动窗口。
      

  2.   

    用OnNcHitTest先测试是否点击中窗体,当返回真时设置光标SetCurSor,在当前视的OnMouseMove中MoveWindow或者SetWindowPos
      

  3.   

    void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));  PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y)); 
    CDialog::OnLButtonDown(nFlags, point);
    }
    void CTestDlg::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));  CDialog::OnLButtonUp(nFlags, point);
    }
      

  4.   

    void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS)); 
    m_bDown=true;
    CDialog::OnLButtonDown(nFlags, point);
    }
    void CTestDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
     if(m_bDown)
     {
       CRect rcWnd,rcClt;
       GetWindowRect(&rcWnd);
       GetClientRect(rcClt);
       Point pt=point;
       ScreenToClient(&pt);
       int x=pt.x-rcClt.left;
       int y=pt.y-rcClt.top;
       MoveWindow(point.x-x,point.y-y,rcWnd.Width(),rcWnd.Height(),TRUE);
       UpdateWindow();
     }
    CDialog::OnMouseMove(nFlags, point);
    }void CTestDlg::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); 
    m_bDown=false;
    CDialog::OnLButtonUp(nFlags, point);
    }
      

  5.   

    在OnNcHitTest()中,修改如下:
       return (nHitTest == HTCLIENT)? HTCAPTION : nHitTest;
      

  6.   

    使windows误认为鼠标处于标题条上。有两种方法:
    1.重载OnNcHitTest()
    UINT CXXDlg::OnNcHitTest(CPoint point)
    {
       UINT nHitTest=CDialog::OnNcHitTest(point);
       return (nHitTest==HTCLIENT)?HTCAPTION:nHitTest;
    }
    2.重载OnLButtonDown()
    void CXXDlg::OnLButtonDown(UINT nFlags,CPoint point)
    {
       CDialog::OnButtonDown(nFlags,point);
       PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
    }以上两种方法我都试过了,绝对可行。
      

  7.   

    重载OnNcHitTest()可能造成右键菜单WM_CONTEXTMENU出问题。