对话框编程之伸缩与扩展

类似于 画图 程序里面的 颜色菜单下,点击编辑颜色,原先的对话框会加宽。如何实现类似的功能呢?


1,利用GetDlgItem 、SetDlgItemText 在按钮的消息响应函数里,进而来改变此按钮里的caption,即上面的数字。

2,利用图像控件,拉成一条横线,并把图像控件的属性中的类型改为框架,凹陷。这样以作分隔符之用。在最后,为了美观,可以将此图像控件设为Inviseble。

3, 利用GetWindowRect 获取对话框的矩形框;

         利用 GetDlgItem(图像控件ID)->GetWindowRect 获取到图像控件的矩形框;

    由 以上二者矩形框的坐标,得到 收缩后的新矩形的坐标。

  4,利用SetWindowPos 得到更新后的矩形窗口。 注意 这个函数里要使用 SWP_NOMOVE 和SWP_NOORDER.

 

效果示例图片:

    收缩前:

      

   收缩后:

   




示例代码:

void CTestDlg::OnButton2() 
{
	// TODO: Add your control notification handler code here
	CString str;
	if(GetDlgItemText(IDC_BUTTON2,str),str=="收缩<<")
	{
		SetDlgItemText(IDC_BUTTON2,"扩展>>");
	}
	else
	{
		SetDlgItemText(IDC_BUTTON2,"收缩<<");
	}

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



来源:《孙鑫VC++视频教程》第7集从01:37:38秒开始,到02:03:47 秒结束,描述的这部分内容。



你可能感兴趣的:(VC++)