实现收缩对话框程序

2015/06/06 MFC学习

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;
}

程序运行结果:

Search

    Post Directory