使用客户区拖动 CMDIChildWnd

Drag CMDIChildWnd using client area

我正在尝试创建一个 CMDIChildWnd 没有标题栏,可在客户区使用鼠标拖动。

进入我添加的消息映射

ON_WM_LBUTTONDOWN()

void CChildFrame::OnLButtonDown(UINT nFlags, CPoint point)
{
    SendMessage(WM_SYSCOMMAND, SC_MOVE | 0x0002);
}

结果是 child windows 可以根据需要使用鼠标移动,但只能在其区域内移动。

知道我该如何继续吗?

我用了一个小技巧。实现该行为的 class 是 CFormView 的派生 class,我能够按预期移动 window,将 htcaption 消息发送给父级

void derived_CFormView::OnLButtonDown(UINT nFlags, CPoint point)
{
    CFormView::OnLButtonDown(nFlags, point);

    GetParentFrame()->PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
}

void derived_CFormView::OnLButtonUp(UINT nFlags, CPoint point)
{
    CFormView::OnLButtonUp(nFlags, point);
    GetParentFrame()->PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
}