我发现了这个优秀的资源:
https://mariusbancila.ro/blog/2015/07/27/dynamic-dialog-layout-for-mfc-in-visual-c-2015/
您所要做的就是删除动态布局并重新创建它:
void CWishListDlg::SetupDynamicLayout()
{
// Disable dynamic layout (this will delete the pointer and set it to NULL)
EnableDynamicLayout(FALSE);
// Enable dynamic layout (this will create a new pointer with no elements)
EnableDynamicLayout(TRUE);
// Re-create the dynamic layout content
auto pManager = GetDynamicLayout();
if (pManager != nullptr)
{
pManager->Create(this); // Assign the window!
auto moveNone = CMFCDynamicLayout::MoveNone();
auto moveVertical100 = CMFCDynamicLayout::MoveVertical(100);
auto moveBoth100 = CMFCDynamicLayout::MoveHorizontalAndVertical(100, 100);
auto sizeBoth100 = CMFCDynamicLayout::SizeHorizontalAndVertical(100, 100);
auto sizeHorizontal100 = CMFCDynamicLayout::SizeHorizontal(100);
auto sizeNone = CMFCDynamicLayout::SizeNone();
pManager->AddItem(m_staticSettings.GetSafeHwnd(), moveNone, sizeHorizontal100);
pManager->AddItem(m_staticTreeDetails.GetSafeHwnd(), moveNone, sizeBoth100);
pManager->AddItem(m_Tree.GetSafeHwnd(), moveNone, sizeBoth100);
pManager->AddItem(IDC_BUTTON_HELP, moveVertical100, sizeNone);
pManager->AddItem(IDC_BUTTON_REPORT, moveBoth100, sizeNone);
pManager->AddItem(IDC_BUTTON_EXPAND_ALL, moveBoth100, sizeNone);
pManager->AddItem(IDC_BUTTON_COLLAPSE_ALL, moveBoth100, sizeNone);
pManager->AddItem(IDC_STATIC_RESIZE, moveBoth100, sizeNone);
}
}
遗憾的是,您不能只获取布局中现有的控件或告诉它根据活动内容重新初始化。但这种方式效果很好。现在它可以正确调整大小: