1.创建一个基于对话框的应用程序;
2.在CShrinWinDlg类中添加变量:

3.在CShringWinDlg.cpp中的构造函数进行变量初始化:
CShrinkWinDlg::CShrinkWinDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CShrinkWinDlg::IDD, pParent)
, m_shrink(false)
, m_winWidth(0)
, m_shrinkWidth(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//构造函数中变量的初始化
m_shrink = true;//初始化对话框为收缩
m_winWidth = 0;
m_shrinkWidth =0;
}
4.在CShrinWinDlg类中的OnInitDialog()函数中添加如下代码:
BOOL CShrinkWinDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
.
.
.
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
.
.
.
///////////////////////////////////////添加代码
CRect winRect;//对话框矩形
GetWindowRect(winRect);//获得对话框矩形
m_winWidth = winRect.Width();//对话框的原始高度
CRect btRect;//按钮矩形
GetDlgItem(IDC_BUTTON1)->GetWindowRect(btRect);//获得按钮矩形
m_shrinkWidth = btRect.right;//收缩后对话框的高度
//设置收缩对话框
winRect.SetRect(winRect.left,winRect.top,btRect.right,winRect.bottom);
MoveWindow(winRect,TRUE);//移动对话框生效
return TRUE;
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
5.给按钮添加处理函数,双击按钮添加如下代码:
void CShrinkWinDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CRect winRect; //对话框矩形
GetWindowRect(&winRect); //获得对话框矩形
//如果是收缩状态
if(m_shrink)
{//设置为非收缩状态
winRect.SetRect(winRect.left,winRect.top,winRect.left+m_winWidth,winRect.bottom);
GetDlgItem(IDC_BUTTON1)->SetWindowText(L"<<");//更改按钮文字
}
else
{//设置为收缩状态
winRect.SetRect(winRect.left,winRect.top,winRect.left+m_shrinkWidth,winRect.bottom);
GetDlgItem(IDC_BUTTON1)->SetWindowText(L">>");//更改按钮文字
}
MoveWindow(winRect,TRUE);
m_shrink = !m_shrink;
}
程序运行结果:

