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

标签 c++ mfc resize cdialog

我不想为此目的使用其他类,例如来自 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);


}

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

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

enter image description here

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

最佳答案

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

关于c++ - 如何很好地处理 cdialogex 调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42992087/

相关文章:

c++ - 如何调整结构 vector 的大小?

javascript - Chrome 的窗口调整大小事件问题

c++ - SDL2 在 Fedora 21 中调整 buggy 但在 Windows 中正常

c# - 非托管 C++ 加密字符串转换为 C# byte[]

c++ - 观察者模式与继承 : Not calling the correct function

c++ - 每次获取不同的地址

c++ - 编辑控件中的搜索图标与输入区域重叠

visual-c++ - 如何为 MFC 中的多个按钮编写一个消息处理程序?

c++ - MFC 单文档应用程序用户输入

c++ - 结构内存分配中的 char*