在MFC中拖动子对话框时如何移动父对话框?

时间:2013-12-04 06:56:44

标签: c++ mfc

真的需要一些帮助 拖动子对话框时如何移动父对话框?

我有它,所以当我拖动父对话框时,子对话框也被移动,但不是相反的关系。

非常感谢任何帮助,谢谢!

我的主要dialog.cpp:

void MainDialog::OnMove(int x, int y)
{
    CDialog::OnMove(x, y);
    m_pDialog->SetWindowPos(&wndTop, x, y, 50, 50, SWP_NOZORDER);  // child dialog
}

BEGIN_MESSAGE_MAP(CTranslucentDialog, CDialog)
    //AFX_MSG_MAP
    ON_WM_ERASEBKGND()
    ON_WM_MOVE()
    ON_WM_SIZE()
    ON_WM_CREATE()
    ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

谢谢,我能够通过为NCHITTEST创建处理程序并返回HTTRANSPARENT来使其工作。

LRESULT CGadgetStandardDialog::OnNcHitTest(CPoint point)
{
    return HTTRANSPARENT;
}

1 个答案:

答案 0 :(得分:2)

问题是孩子消耗了鼠标输入。因此,单击子窗口并在那里拖动,通常会在子窗口中选择一些数据(在编辑控件中)。或者对于静态控件,鼠标输入将转发给父级。

所以你。需要决定......你总是有能力在WM_NCHITTEST中处理它并返回HTCAPTION,或者你允许父进程在重新调整HTTRANSPARENT时处理它。

顺便说一句:如果你想在客户区使用鼠标移动窗口,那么只需处理WM_NCHITTEST并返回HTCAPTION。没有必要实现鼠标移动处理程序并自行完成。