记录最大化,最小化,还原时带Tab和List的对话框遇到的问题

本界面使用了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值