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

Posted

技术标签:

【中文标题】如何很好地处理 cdialogex 调整大小?【英文标题】:How to nicely handle cdialogex resizing? 【发布时间】:2017-03-24 05:33:12 【问题描述】:

我不想为此使用其他类,例如 codeproject.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);



当我单击对话框消息的右侧时,显示右侧。

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

我不希望有人为我做这一切。只是建议我如何做到这一点。我从软件depends.exe中获取这个投手。任何帮助将不胜感激。提前致谢。

【问题讨论】:

您在使用 Visual Studio 吗?您可以在 IDE 中设置所有调整大小的对话框。为什么要重新发明***? @AndrewTruckle 是的,我正在使用带有 MFC 的 Visual Studio 2013。 考虑尝试 2015 或 2017 版本,因为它们在 IDE 中添加了对对话框调整大小的本机支持。我现在已经完全删除了我曾经依赖的 CSizingDialog 类。 【参考方案1】:

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

【讨论】:

以上是关于如何很好地处理 cdialogex 调整大小?的主要内容,如果未能解决你的问题,请参考以下文章

隐藏状态栏时如何强制windowSoftInputMode调整大小

Redshift卡在调整大小模式?

用动画调整 UIView 的大小,子视图不会动画

为啥 C++ 中的向量不会自动调整大小

重新打开时 JQuery UI 对话框没有正确调整大小?

移动设备的 CSS 字体大小