本界面使用了Tab标签页,添加了两个标签,每个标签对应一个子对话框,对子对话框做了一些属性上的改变。在每个子对话框内部使用了单选按钮,按钮,列表等控件。
接下来是一些注意事项:
1.首先最大化,最小化不需要重绘标题栏,除非你想拥有更丰富的样式。只需要在主界面(添加标签页的界面)对话框里修改一些属性:Maximize Box,Minimize Box 均修改为true。
2.添加最大化最小化处理函数,我这里参考的是这一条博客(47条消息) MFC对话框窗口及其控件等比例缩放(实测)_kifea的博客-优快云博客
但是,出现了两个问题,一是列表最大化之后不是整个列表都被拉伸,而是在列表后面多出空白的某一列。为了解决这个问题,我参考了这个博客(47条消息) MFC控件随对话框放大自动适应(ListCtrl和Combox)_Hat_man_的博客-优快云博客成功解决了多出一列的问题。
二是最大化和还原的时候当前窗口并不会立刻变化,但是tab切换到另一个标签页的时候可以最大化和还原,再切换回来的时候当前窗口也可以最大化和还原了。这是因为tab这个控件的特有属性,在最大化的时候,仅仅只是Tab标签被拉伸了,而子对话框并未被拉伸,所以我们需要单独获取子对话框的位置,让它随着标签被拉伸。我添加了如下代码:
//让Tab控件客户区(子对话框)随Tab控件改变
if(m_tab1.GetSafeHwnd() || m_tab2.GetSafeHwnd())
{
CRect rctab;
CRect reItem;
m_tab.GetClientRect(&rctab);
m_tab.GetItemRect(0,&reItem);
rctab.DeflateRect(0, reItem.bottom, 0,0);
m_tab1.MoveWindow(&rctab);
m_tab2.MoveWindow(&rctab);
}
其中m_tab是我的标签控件,m_tab1,m_tab2是我的子对话框变量名。经过上述操作,问题就成功解决啦1