写一个函数可以移动主窗口.类似按住CAPTION拖一样.不知如何实现.如某个判断成立,执行此函数,即可移动.

解决方案 »

  1.   

    BOOL MoveWindow(
      HWND hWnd,      // handle to window
      int X,          // horizontal position
      int Y,          // vertical position
      int nWidth,     // width
      int nHeight,    // height
      BOOL bRepaint   // repaint flag
    );
      

  2.   

    if(判断成立)
    SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
    else
    CDialog::OnLButtonDown(nFlags, point);
      

  3.   

    代码放在CYourDlg::OnLButtonDown(...)里
      

  4.   

    这个很简单,我刚写好一个.
    大体是在OnTimer里执行移动函数.
    可以这样.
    if(aa)//用来控制是否移动
    {
    CPoint point;
    GetCursorPos(&point);//得到当前鼠标位置;
    CRect rect;
    AfxGetMainWnd()->GetWindowPos(&rect);//得到当前主窗口位置;
    rect.right=rect.Width()+point.x;//注意顺序:先计算right和bottom
    rect.bottom=rect.Height()+point.y;
    rect.left=point.x;
    rect.top=point.y;
    AfxGetmainWnd()->MoveWindow(rect);
    }
    需要时将aa设为真就行了.
    但这样有一个问题,就是每次移动时窗口的左上角就会移动到鼠标的位置.
    所以你还要将未移动位置时鼠标与窗口的位置关系计算出来,
    这里就不多说了,
    如果你有需要我可以将我写的代码给你看看
      

  5.   

    对于bcpl(林平之) 的方法,
    我只在对话框中试过,
    主窗口没试过.
    不过可以肯定的是这只针对于单线程的操作,
    对于多线程是无能为力的.
      

  6.   

    如何取消HTCAPTION消息,回复正常?
      

  7.   

    这两个方法都是对的,我试了,我想林平之的方法如取消的话,可以再发个HTNOWHERE或者别的什么,至于多线程,我想可能还是有办法的,我研究一下,不错,各路大侠多谢了.我对MFC还不是太了解,不知大家是怎么学的.各位老兄不妨介绍点书来,我也多了解一下.