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

Posted

技术标签:

【中文标题】在 MFC 中拖动子对话框时如何移动父对话框?【英文标题】:How do i move parent dialog when dragging child dialog, in MFC? 【发布时间】:2013-12-04 06:56:44 【问题描述】:

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

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

任何帮助将不胜感激,谢谢!

我的主对话框.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】:

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

所以你。需要决定...您始终可以在 WM_NCHITTEST 中处理此问题并返回 HTCAPTION,或者您允许父级在返回 HTTRANSPARENT 时处理此问题。

顺便说一句:如果您想在客户端区域中使用鼠标移动窗口,只需处理 WM_NCHITTEST 并返回 HTCAPTION。无需自己实现鼠标移动处理程序。

【讨论】:

以上是关于在 MFC 中拖动子对话框时如何移动父对话框?的主要内容,如果未能解决你的问题,请参考以下文章

MFC 单击并移动/拖动对话框窗口

VC/MFC 对话框工程中 主窗体与子窗体之间如何传值?

MFC中怎么让子窗体大小随着父窗口的大小变化而改变?

MFC 调整大小对话框和子窗口绘制问题

MFC中如何实现Tab控件里子对话框里的控件跟着对主话框伸缩而改变位置

如何在 MFC 对话框中保持控件的 Z 顺序?