??

解决方案 »

  1.   

    响应WM_LBUTTONDONW ,WM_MOUSEMOVE 消息
    记下鼠标位移
    然后移动对话框就可以了
      

  2.   

    我提问前是这么做得,但是移动时重绘效果很差,不知道应该怎么办我这样写的
    oldrc和oldpoint是类成员.
    void popup::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    if(nFlags & MK_LBUTTON){
    CRect moverc;
    moverc.bottom=oldrc.bottom+point.y-oldpoint.y;
    moverc.top=oldrc.top+point.y-oldpoint.y;
    moverc.left=oldrc.left+point.x-oldpoint.x;
    moverc.right=oldrc.right+point.x-oldpoint.x;
    this->MoveWindow(moverc);
    }
    //CDialog::OnMouseMove(nFlags,point);
    }void popup::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CRect rc;
    GetWindowRect(&rc);
    oldrc=rc;
    oldpoint=point;
    CDialog::OnMouseMove(nFlags, point);
    CDialog::OnLButtonDown(nFlags, point);
    }
      

  3.   

    简单方法,重载消息OnLButtonDown
    发给它消息,使系统以为是在拖放标题栏,如此,方便快捷void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y));

    CDialog::OnLButtonDown(nFlags, point);
    }
      

  4.   

    当我们的鼠标在窗体任意位置上拖动鼠标时,让Windows以为鼠标在标题栏上拖动,不就可以实现任意点击窗体的什么地方都可以移动窗体了吗?可以在CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)中添加下面一句:PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y));该语句的作用是向系统发送HTCAPTION消息,让系统以为鼠标点在标题栏上。