【发布时间】:2018-06-23 18:36:04
【问题描述】:
这是一个可调整大小的窗口:
设置动态布局属性,以便顶部组框调整宽度,而下部组/框和树在两个维度上与 3 个按钮一起调整大小。
对于高级复选框,我添加了代码来隐藏额外的控件并调整相关框的高度。所以它看起来像这样:
用于切换控制值的代码是:
void CWishListDlg::ToggleAdvancedMode()
{
CRect rtSortTalk, rtTalkSettings, rtTreeGroup, rtTree, rtTalkCombo;
m_staticSortTalk.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
m_cbTalkSortField.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
m_cbTalkSortOrder.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
m_staticSortSpeaker.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
m_cbSpeakerSortField.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
m_cbSpeakerSortOrder.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
m_staticTalkHistory.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
m_checkIncludeTalkHistory.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
m_staticStyle.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
m_cbStyle.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
m_staticSortTalk.GetWindowRect(&rtSortTalk);
m_staticSettings.GetWindowRect(&rtTalkSettings);
m_staticTreeDetails.GetWindowRect(&rtTreeGroup);
m_Tree.GetWindowRect(&rtTree);
if (m_bAdvancedMode)
{
rtTalkSettings.bottom += m_iOffsetY;
rtTreeGroup.top += m_iOffsetY;
rtTree.top += m_iOffsetY;
}
else
{
rtTalkSettings.bottom -= m_iOffsetY;
rtTreeGroup.top -= m_iOffsetY;
rtTree.top -= m_iOffsetY;
}
ScreenToClient(&rtTalkSettings);
ScreenToClient(&rtTreeGroup);
ScreenToClient(&rtTree);
m_staticSettings.MoveWindow(&rtTalkSettings);
m_staticTreeDetails.MoveWindow(&rtTreeGroup);
m_Tree.MoveWindow(&rtTree);
}
它工作正常。我可以切换到我心中的内容。直到我尝试调整窗口大小:
我看不到任何基于活动显示重新计算动态布局属性的方法。
如果勾选“高级”,以便控件可见(从而匹配资源编辑器),则它可以很好地调整大小。只有当它被取消并且我修改了两个控件时,调整大小才会正常工作。
【问题讨论】:
标签: mfc