对话框伸缩功能的实现

1.按钮点击文字变化 同时对话框大小变化

void CTestDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	CString str;
	if (GetDlgItemText(IDC_BUTTON1,str),str=="收缩<<")
	{
		SetDlgItemText(IDC_BUTTON1,"扩展>>");
	} 
	else
	{
		SetDlgItemText(IDC_BUTTON1,"收缩<<");
	}
	static CRect rectLarge;
	static CRect rectSmall;
	if (rectLarge.IsRectNull())
	{
		CRect rectSeparator;
		GetWindowRect(&rectLarge);
		GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);

		rectSmall.left=rectLarge.left;
		rectSmall.top=rectLarge.top;
		rectSmall.right=rectLarge.right;
		rectSmall.bottom=rectSeparator.bottom;
	}
	if(str=="收缩<<")
	{
		SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE|SWP_NOZORDER);
	}
	else
	{
		SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),SWP_NOMOVE|SWP_NOZORDER);
	}
}

获取按钮文字 若为“收缩<<”则变为"扩展>>"

	static CRect rectLarge;
	static CRect rectSmall;

定义两个静态变量类,静态变量在第一次获得取值后,以后再次单击此按钮时,并不需要再去设置这两个变量的值,因此,将这两个变量定义为静态变量。

*IsRectNull() 判断矩阵是否为空。

GetWindowRect(&rectLarge)获得整个对话框的原始尺寸

GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);获得图像控件的大小尺寸赋值给rectSeparator

	if(str=="收缩<<")
	{
		SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE|SWP_NOZORDER);
	}
	else
	{
		SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),SWP_NOMOVE|SWP_NOZORDER);
	}

如果当前按钮文本显示为“收缩”

则调用SetWindowPos设置为rectSmall的宽高, 最后一个参数为风格的定义 

SWP_NOMOVE|SWP_NOZORDER

1:维持窗口当前位置,这将忽略x,y参数

2:维持当前的z次序,这将忽略pWndInsertAfter参数

windows系统管理三个独立的z次序——一个用于顶层窗口、一个用于兄弟窗口,还有一个是用于最顶层窗口。最顶层窗口覆盖所有其他非顶层窗口,而不管它是不是活动窗口或是前台窗口。                                                                                                                                             

你可能感兴趣的:(MFC学习)