MFC下分割CSplitterWnd窗口等比例缩放

http://blog.csdn.net/ruihaha/article/details/38018231

在MFC中添加CSplitterWnd分割窗口后,屏幕分为2*2区域,

  

当用鼠标拖动分割窗口最外面的边界时,窗口并没有等比例的变化,只是右侧或者下面的两个窗口变化,


解决办法有很多,譬如在输出类的onsize、属性类的onsize以及类视图类的onsize中添加splitter对象的尺寸变化函数,不过需要加入更多的条件函数。

更简单、方便的一种方法就是重写分割函数类,继承CSplitterWnd,然后改写onsize方法。前提,要加入条件函数,等到所有的窗口绘制完之后再进行等比例缩放操作。

新建类中的onsize函数的等比例操作:

		int splitterWidth = 0 , minWidth=20 ,splitterHeight = 0 , minHeight=20 ;
		this->GetColumnInfo(0,splitterWidth, minWidth);//获取第一列的窗宽		
		this->SetColumnInfo(0 , splitterWidth *cx/m_splitterWidth ,50);//设置第一列的窗宽,等比例变化
		this->GetRowInfo(0,splitterHeight,minHeight);	//获取第一行的窗高	
		this->SetRowInfo(0,splitterHeight *cy/m_splitterHeight,50);//设置第一行的窗高,等比例
		this->RecalcLayout();//重新排列(很重要)


先继承CSplitterWnd,改写onsize函数;先加条件(窗口全部显示出来),然后进行等比例缩放。


在输出类的onsize中进行等比例窗高操作时,初始化没有问题;但是在属性类的onsize中进行等比例窗宽设置时,窗口显示前,第一列的窗口的宽度在最后一次onsize的时候变成195,不知道为啥。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值