对话框编程之伸缩与扩展

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


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 秒结束,描述的这部分内容。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值