DoModal()对话框后在桌面上移动不移出父对话框的界面呢就是对话框在桌面用鼠标不能移出父窗口的边界.

解决方案 »

  1.   

    在子对话框中捕获窗口移动消息(WM_MOVING),并且判断是否已经移出了父窗口的区域,如果是,则设置相应的矩形就可以防止窗口移出去,可以看看MSDN
      

  2.   

    void OnMoving(
       UINT nSide,      
       LPRECT lpRect 
    );
    在这个函数中如果你发现子窗口要移出父窗口了,就把lpRect指向的矩形设置成上次窗口所在的矩形就可以了。注意,矩形的坐标是相对于屏幕的。
      

  3.   

    代码:下面是主对话框打开子对话框按钮代码:void CTest0424Dlg::OnButton5() 
    {
    // TODO: Add your control notification handler code here // 获取主对话框坐标
    CRect rect;
    GetWindowRect( rect );

    /////// CChild dlg; // 子对话框类中记住主对话框坐标
    dlg.m_fatherRect = rect; dlg.DoModal();
    }
    下面是子对话框类的两个成员变量:public:
    CRect m_lastRect;  // 子对话框上一次坐标
    CRect m_fatherRect;  // 保存了主对话框的坐标下面是子对话框 OnMoving 函数代码:void CChild::OnMoving(UINT nSide,LPRECT lpRect ) 
    {
    CDialog::OnMoving(nSide,lpRect);

    // TODO: Add your message handler code here // 获取子对话框正要移动的坐标
    CRect rect( lpRect ); // 关键地方
    // CRect::PtInRect 函数可以为我们判断
    // 关键在一个左上,一个右下点
    if( m_fatherRect.PtInRect(rect.TopLeft()) && m_fatherRect.PtInRect(rect.BottomRight()) )
    m_lastRect = rect;
    else
    *lpRect = m_lastRect;
    }