如何很好地处理cdialogex调整大小?

时间:2017-03-24 05:33:12

标签: c++ mfc resize cdialog

我不想为codemelject.com中的easysize或sizecbar使用其他类来实现此目的。我正在使用MFC CDialogEx。我试试这个:

LRESULT ChildDialog::OnNcHitTest(CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    //UINT nHitTest = CWnd::OnNcHitTest(uParam, lParam);
    //return (nHitTest == HTLEFT) ? HTNONE : nHitTest;

    return CDialogEx::OnNcHitTest(point);
}

void ChildDialog::OnSizing(UINT fwSide, LPRECT pRect)
{
    //
    //TRACE("%d\n", fwSide);

    if (fwSide == WMSZ_RIGHT)
    {

        SetClassLong(m_hWnd,
            GCL_HCURSOR,
            (LONG)LoadCursor(NULL, IDC_ARROW));

        //ASSERT(FALSE);
        //AfxMessageBox(_T("right"));
    }
    // TODO: Add your message handler code here

    CDialogEx::OnSizing(fwSide, pRect);


}

当我点击对话框右侧的消息显示正确时。

正如你在投手中看到的那样,我试着这样做。更改光标,绘制黑点线。调整对话框只有一侧上方,并希望禁用所有角落和左,右和下。而且当我从上方调整对话框时也想移动上层控件。

enter image description here

我不希望有人为我做这一切。只是建议我如何实现这一目标。我从软件depends.exe拿这个投手。任何帮助将不胜感激。提前致谢。

1 个答案:

答案 0 :(得分:0)

您必须处理OnNCHitTest和OnSetCursor才能更改光标。当光标位于边框上并在OnSetCurosr中设置相应的光标时,从OnNCHitTest返回HTNOWHERE。您可以从OnNCHitTest设置成员变量以了解命中测试值,例如m_hittest。 为了进行大小调整,您可以在捕获时使用OnMouseMove中的CRectTracker类(向左按下按钮)。