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

时间:2018-06-21 10:09:13

标签: mfc cpropertysheet

多亏了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中被调用。第一次显示工作表时,它看起来不错:

Property Sheet

您可以在右下角看到锚点。现在,当我调整窗口大小时:

Resizing sheet

如您所见,它无法正确呈现锚点。

更新

我设置了WS_CLIPSIBLINGS,没有任何区别。

更新

只是让所有人都知道新主题抓取器无法正常工作的原因是因为我没有添加OnNcHitTest处理程序等。

2 个答案:

答案 0 :(得分:1)

修改CMFCPropertySheet的样式并添加WS_CLIPSIBLINGS!

也将WS_CLIPSIBLINGS添加到抓手窗口中。

将WS_CLIPCHILDREN添加到CPropertySheet。

答案 1 :(得分:1)

我从未尝试过,我进行了一些搜索,但动态执行此操作似乎存在一些问题。有些人说这不可能完成,有些人似乎提出了解决办法。 这是我找到的一些更好的链接,希望对您有所帮助。

How to add a gripper to a PropertySheet?

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


这最终帮助了:

Making a CMFCPropertySheet resizable with dynamic layouts

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