一个程序
2个窗口
A是主窗口
B是附窗口B紧贴在A上当A移动的时候,响应OnMove()
然后发出一个消息给B(SendMessage),B接到这个消息以后重新获取A的坐标,然后使用MoveWindow()移动自己的位置现在发现
当拖动A移动位置的时候,B也会移动,但是窗口B的移动会造成很多拖动的痕迹,虽然会自动清除掉
但是还是比较明显不像Windows的对话框,虽然也有痕迹,但是不明显请问如何解决?相关代码是CB *pB = new CB();void CADlg::OnMove(int x, int y)
{
CDialog::OnMove(x, y); HWND hWnd = pB->m_hWnd ;
::SendMessage (hWnd, WM_USER_MAINWINDOW_MOVE, 0, 0);
}LONG CB::OnMainWindowMove(WPARAM wParam,LPARAM lParam)
{
CA *pdlg = (CA*)AfxGetApp()->GetMainWnd(); RECT rcMain,rcSelf;    //rcMain指窗口A,rcSelf指窗口B
UINT nMainWidth; pdlg->GetWindowRect (&rcMain);
this->GetWindowRect (&rcSelf);
nMainWidth = rcMain.right - rcMain.left ;
this->MoveWindow (rcMain.left,
rcMain.bottom ,
rcMain.right - rcMain.left ,
rcSelf.bottom - rcSelf.top ,
1);
return TRUE;
}

解决方案 »

  1.   

    打错一点内容CA *pdlg = (CA*)AfxGetApp()->GetMainWnd();应该改为CADlg *pdlg = (CADlg*)AfxGetApp()->GetMainWnd();
      

  2.   

    移动之前加入SetRedraw(FALSE),移动之后SetRedraw(TRUE).
      

  3.   

    修改为
     
    SetRedraw(FALSE);
    this->MoveWindow (rcMain.left,
    rcMain.bottom ,
    rcMain.right - rcMain.left ,
    rcSelf.bottom - rcSelf.top ,
    1);
    SetRedraw(TRUE);
    不行
    移动以后新的窗口没有被正常重绘
    而旧的还存在
      

  4.   

    如果你只是想实现你所要的功能,而不是研究你所采用的当前的技术,
    我到建议你看看下面这篇文章:
    http://www.codeproject.com/dialog/killpopups.asp
    他是在一个主对话框上放了一个picture控件,作为placeholder,然后把几个子对话框嵌上去的
    整个过程规范且具有很强的指导意义,实际应用效果也很好