将调整大小锚点添加到派生的 CMFCPropertySheet class

Adding a resize anchor to derived CMFCPropertySheet class

感谢 Stack Overflow 的支持,我已经能够创建自己的支持调整大小的 CResizingMFCPropertySheet。现在,我去添加一个调整大小的锚点,我使用了这段代码:

void CResizingMFCPropertySheet::InitialiseResizeIcon()
{
    CRect rcIcon, rcClient;

    m_bmpResize.LoadOEMBitmap(OBM_SIZE);
    m_lblResize.Create(0, WS_CHILD | WS_VISIBLE | SS_BITMAP, 
               CRect(0, 0, 16, 16), this, IDC_STATIC_RESIZE);
    m_lblResize.SetBitmap(m_bmpResize);

    GetClientRect(rcClient);
    m_lblResize.GetClientRect(rcIcon);
    m_lblResize.SetWindowPos(&CWnd::wndTop, rcClient.right - rcIcon.Width(), 
               rcClient.bottom - rcIcon.Height(), 0, 0, SWP_NOSIZE);
}

(注意:修改了上面的代码,不再使用动态布局-不起作用)。

该方法在 OnInitDialog 中被调用。当 sheet 首次显示时,它看起来正常:

您可以在右下角看到锚点。现在,当我去调整 window:

的大小时

如您所见,它没有正确渲染锚点。

更新

我设置了WS_CLIPSIBLINGS,没啥区别

更新

只是想让大家知道新主题抓手无法正常工作的原因是因为我没有添加 OnNcHitTest 处理程序等

修改CMFCPropertySheet的样式,添加WS_CLIPSIBLINGS!

也将 WS_CLIPSIBLINGS 添加到抓手 window。

将 WS_CLIPCHILDREN 添加到 CPropertySheet。

我从来没有尝试过,我做了一些搜索,动态地执行此操作似乎存在一些问题。有些人说这是不可能的,其他人似乎提出了这样做的方法。 这是我找到的一些更好的链接,希望对您有所帮助。

https://www.codeproject.com/Tips/214744/How-to-implement-a-resizable-property-sheet-class

https://social.msdn.microsoft.com/Forums/vstudio/en-US/2a85d3a9-3f91-482c-8bc3-02e132035c7f/cannot-resize-a-new-cmfcpropertysheetcmfcpropertypage?forum=vcgeneral

https://www.codeguru.com/cpp/controls/propertysheet/article.php/c543/Resizing-the-Property-Sheet.htm


这个最终帮助了:

那里的答案解释了如何使用 OnSize 正确绘制自定义子控件。