向派生的CMFCPropertySheet类添加调整大小锚点

向派生的CMFCPropertySheet类添加调整大小锚点,mfc,cpropertysheet,Mfc,Cpropertysheet,由于支持堆栈溢出,我已经能够创建自己的CResizingMFCPropertySheet,支持调整大小。现在,我添加了一个调整锚定,并使用了以下代码: void CResizingMFCPropertySheet::InitialiseResizeIcon() { CRect rcIcon, rcClient; m_bmpResize.LoadOEMBitmap(OBM_SIZE); m_lblResize.Create(0, WS_CHILD | WS_VISIBLE

由于支持堆栈溢出,我已经能够创建自己的
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
中调用该方法。第一次显示图纸时,它看起来正常:

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

正如您所看到的,它没有正确渲染锚点

更新 我已经设置了
WS\u CLIPSIBLINGS
,这没有什么区别

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

修改CMFCPropertySheet的样式并添加WS_clipsibling

将WS_剪辑也添加到夹持器窗口


将WS_CLIPCHILDREN添加到CPropertySheet。

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


这一点最终有所帮助:


这里的答案解释了如何使用
OnSize

正确绘制自定义子控件。请参阅更新的问题。我添加了这个样式,它没有任何区别。只是检查了我的设置并更改了答案。我已经为工作表添加了
WS\u CLIPCHILDREN
。我将
WS_CLIPSIBLINGS
添加到锚
Create
paramaters中,但仍然没有任何乐趣。这里更新的答案给出了我需要的原则:我打赌你正在使用我在另一个主题中建议的调整对话框大小方法。该方法移动按钮并调整子控件的大小。它看到此静态控件并尝试调整其大小。即使你解决了背景问题,这也不是一个真正的抓手。它只是在抓手应该在的地方画一些东西。@BarmakShemirani是的,我正在使用你的延迟调整大小。现在,即使我使用你的手爪渲染,虽然它看起来还可以,但我可以让它不正确渲染。我从来没有遇到过你使用Windows盲人的问题,可能是它导致了一个特定的错误。你能从链接中显示抓取器方法的问题吗?@BarmakShemirani我正在使用WindowsBlind。不要担心,因为我需要OEM_尺寸来保持一致性。这里更新的答案给出了我需要的原则: