SDI分割视图中的控件如何随着窗口改变和分割条拖动而自动调整大小

时间:2021-08-06 03:48:18
一个CFormView的SDI工程,使用CSplitterWnd分割为多个CFormView视图,这些视图中的各个控件,如何既能根据窗口大小的变化而自动调整大小,又能根据分割条的拖动而自动调整大小?网上很多扩展类只适用于非分割视图的控件大小的自动调整,因为拉动整个窗口和拖动分割条是两码事。这问题被整的没脾气了,求高手相助,谢谢!

7 个解决方案

#1


原理都是一样的
你可以参考这篇文章
http://blog.csdn.net/xianglitian/article/details/5667015

#2


codeproject上搜索easysize

#3


为每个CFormView类添加OnSize函数,分别计算控件的偏移量:

void CTestView11::OnSize(UINT nType, int cx, int cy)
{
  CRect reList;
  CRect reEdit;
  if(m_listControl)
  {
    m_listControl.GetClientRect(&reList);
    reList.right = reList.left + cx;
    reList.bottom = reList.top + cy;
    reList.top = 35;
    reList.left = 2;
    m_listControl.MoveWindow(reList);
  }
  if(m_edit1)
  {
    m_edit1.GetClientRect(&reEdit);
    reEdit.top = 6;
    reEdit.left = 70;
    reEdit.right = reEdit.left+cx;
    reEdit.bottom = reEdit.top+25;
    m_edit1.MoveWindow(reEdit);
  }
}

#4


感谢以上三位热心人!
easysize我更早时候用过,发现它只对基于CDialog的对话框有效,而对于从CFormView继承来的则无效,如二楼引述文章的作者所说,我也看不懂,但在可用范围内确实好用
如我问题所强调,让控件随窗口的拉动来自动调整大小易实现,但我还希望鼠标拖动分割条也能让控件自动调整大小,此种情况下,三楼朋友的方法是无效的,它不会响应,因为拖动分割条时窗口的size并没变

#5


引用 4 楼  的回复:
感谢以上三位热心人!
easysize我更早时候用过,发现它只对基于CDialog的对话框有效,而对于从CFormView继承来的则无效,如二楼引述文章的作者所说,我也看不懂,但在可用范围内确实好用
如我问题所强调,让控件随窗口的拉动来自动调整大小易实现,但我还希望鼠标拖动分割条也能让控件自动调整大小,此种情况下,三楼朋友的方法是无效的,它不会响应,因为拖动分割条时窗口的size并没变
你是说拖动分割条子视图的OnSize并不响应?

#6


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#7


该回复于2013-03-04 13:11:48被管理员删除

#1


原理都是一样的
你可以参考这篇文章
http://blog.csdn.net/xianglitian/article/details/5667015

#2


codeproject上搜索easysize

#3


为每个CFormView类添加OnSize函数,分别计算控件的偏移量:

void CTestView11::OnSize(UINT nType, int cx, int cy)
{
  CRect reList;
  CRect reEdit;
  if(m_listControl)
  {
    m_listControl.GetClientRect(&reList);
    reList.right = reList.left + cx;
    reList.bottom = reList.top + cy;
    reList.top = 35;
    reList.left = 2;
    m_listControl.MoveWindow(reList);
  }
  if(m_edit1)
  {
    m_edit1.GetClientRect(&reEdit);
    reEdit.top = 6;
    reEdit.left = 70;
    reEdit.right = reEdit.left+cx;
    reEdit.bottom = reEdit.top+25;
    m_edit1.MoveWindow(reEdit);
  }
}

#4


感谢以上三位热心人!
easysize我更早时候用过,发现它只对基于CDialog的对话框有效,而对于从CFormView继承来的则无效,如二楼引述文章的作者所说,我也看不懂,但在可用范围内确实好用
如我问题所强调,让控件随窗口的拉动来自动调整大小易实现,但我还希望鼠标拖动分割条也能让控件自动调整大小,此种情况下,三楼朋友的方法是无效的,它不会响应,因为拖动分割条时窗口的size并没变

#5


引用 4 楼  的回复:
感谢以上三位热心人!
easysize我更早时候用过,发现它只对基于CDialog的对话框有效,而对于从CFormView继承来的则无效,如二楼引述文章的作者所说,我也看不懂,但在可用范围内确实好用
如我问题所强调,让控件随窗口的拉动来自动调整大小易实现,但我还希望鼠标拖动分割条也能让控件自动调整大小,此种情况下,三楼朋友的方法是无效的,它不会响应,因为拖动分割条时窗口的size并没变
你是说拖动分割条子视图的OnSize并不响应?

#6


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#7


该回复于2013-03-04 13:11:48被管理员删除