主窗口大小发生变化(最大化、向下还原、手工手动)时,FormView中的控件等比例缩放
2011-08-26 18:06
295 查看
原理:记录原来客户区的长和宽,用现在的客户区的长和宽比上原来的。得到一个比例系统。依据这个比例系统来放大/缩小控件的大小(通过改变窗口矩形的坐标)。
实现:
其中m_rectOriginalWindow变量用来记录原来客户区的大小。
在实际实现时出现了一个小问题,在改变窗口大小的时候所有控件都不见了。后经排查原来问题出在:
实现:
void CMSVideoMonitorView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 if(m_bStaticIsInitialized && m_cStatic0.m_hWnd != NULL)//判断是否为真,为真,表示控件已经被初始化(创建),可以进行操作。 /* //否则表明是创建主框架时调用此函数,还没有进行OnInitialUpdate()操作。*/ { for (int i = 0; i < 16; i++) { CRect rect; //获取控件变化前大小 m_cAllStatics[i]->GetWindowRect(&rect); ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标 // cx/m_rect.Width()为对话框在横向的变化比例 rect.left=rect.left * cx/m_rectOriginalWindow.Width(); rect.right=rect.right* cx/m_rectOriginalWindow.Width(); rect.top=rect.top * cy/m_rectOriginalWindow.Height(); rect.bottom=rect.bottom * cy/m_rectOriginalWindow.Height(); m_cAllStatics[i]->MoveWindow(rect);//设置控件大小 } } GetClientRect(&m_rectOriginalWindow);//将变化后的对话框大小设为旧大小 }
其中m_rectOriginalWindow变量用来记录原来客户区的大小。
在实际实现时出现了一个小问题,在改变窗口大小的时候所有控件都不见了。后经排查原来问题出在:
rect.left=rect.left * (cx/m_rectOriginalWindow.Width());
为了易于阅读,我将计算比例的表达式用小括号括了起来。这样会导致,在窗口缩小的时候,比例会是一个小数。然后被近似为0——因为是整型数据。
相关文章推荐
- BCGPFormView嵌入左侧显示属性页,并且同窗口等比例缩放,属性页添加图表随窗口尺寸变化而变化
- 在CFormView中如何让对话框内的控件大小跟随单文档的大小变化
- delphi 窗口最大化后控件的大小变化怎么设置
- MFC窗口和控件大小等比例变化
- MFC窗口和控件大小等比例缩放
- 问题解决——MFC SDI程序 CFormView中控件随窗口缩放
- C# 控件随窗口大小变化自动缩放
- 问题解决——MFC SDI程序 CFormView中控件随窗口缩放
- C# 控件随窗口大小变化自动缩放
- 让FormView上的控件大小随父窗口改变
- CFormView上让控件的大小随着窗体的变化而自动适应
- C# winform 布局,最大化之后再还原,内部其他控件大小怎么随着变化。
- MFC窗口和控件大小等比例变化
- 控件大小随窗口等比例变化
- CFormView上让控件的大小随着窗体的变化而自动适应
- MFC窗口和控件大小等比例变化
- 功能: Form窗口最大化时,控件相对位置变化的问题 (学习日记2016-12-23)
- Qt中窗体控件按照比例缩放,自适应窗口大小进行布局
- C#控件窗口大小变化时同时改变控件比例的实现
- MFC窗口和控件大小等比例变化