MFC 对话框伸缩 初始收缩

       看完孙鑫老师的视频,就能很轻松地实现对话框的伸缩这个功能,但是他演示的是点击按钮后实现伸缩功能。就像他演示的那个画图工具一样,这里我想要的是对话框初始显示的时候就是收缩后的样子。
        这种效果可以这样来实现:
1.由于对话框在显示之前会调用OnInitDialog()这个函数,我们就在这个函数中获得初始化时对话框的大小rectOrig,和separator的rectSmall
2.然后使用SetWindowPos()设置rectSmall就可以实现初始收缩的效果。
具体代码如下:
BOOL C**Dlg::OnInitDialog()
{
    ...
    SetDlgItemText(IDC_BTN_TRANSFER,"<< 扩展");
    CRect rectSeparator;
    GetWindowRect(&m_rectOrig);
    GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);

    m_rectSmall.left = m_rectOrig.left;//将m_rectSmall、m_rectOrig设置成对话框的数据成员,方便后面的伸缩事件使用
    m_rectSmall.top = m_rectOrig.top;
    m_rectSmall.right = m_rectOrig.right;
    m_rectSmall.bottom = rectSeparator.bottom;
    SetWindowPos(NULL,0,0,m_rectSmall.Width(),m_rectSmall.Height(),
                    SWP_NOMOVE|SWP_NOZORDER);
    ...
}


3.添加伸缩按钮响应事件函数,具体代码如下:
void C**Dlg::OnBtnTransfer() 
{
    CString str;
    if(GetDlgItemText(IDC_BTN_TRANSFER,str),str == ">> 隐藏")
    {
        SetDlgItemText(IDC_BTN_TRANSFER,"<< 扩展");
    }
    else
    {
        SetDlgItemText(IDC_BTN_TRANSFER,">> 隐藏");
    }

    if(str == ">> 隐藏")
    {
        SetWindowPos(NULL,0,0,m_rectSmall.Width(),m_rectSmall.Height(),
                    SWP_NOMOVE|SWP_NOZORDER);
    }
    else
    {
        SetWindowPos(NULL,0,0,m_rectOrig.Width(),m_rectOrig.Height(),
                    SWP_NOMOVE|SWP_NOZORDER);
    }
}
开始运行:


点击扩展后:



备注一下分割线的添加:使用picture控件作为分割线,把picture控件拉成一条线,然后勾掉其General--->Visible
勾上Style--->sunken属性


你可能感兴趣的:(mfc,对话框伸缩,初始收缩)