如何使控件大小随着对话框大小自动调整

首先LeftDockDialog.h文件里面申明m_rect,类型为public;

然后在CLeftDockDialog文件中添加以下函数:

void CLeftDockDialog::ChangeSize(UINT nID, int x, int y) //nID为控件ID,x,y分别为对话框的当前长和宽

{
CWnd *pWnd;
pWnd = GetDlgItem(nID);
CRect rec;
if (pWnd != NULL) //判断是否为空,因为在窗口创建的时候也会调用OnSize函数,但是此时各个控件还没有创建,Pwnd为空
{
pWnd->GetWindowRect(&rec); //获取控件变化前的大小
ScreenToClient(&rec); //将控件大小装换位在对话框中的区域坐标
rec.left = rec.left*x / m_rect.Width(); //按照比例调整空间的新位置
rec.top = rec.top*y / m_rect.Height();
rec.bottom = rec.bottom*y / m_rect.Height();
rec.right = rec.right*x / m_rect.Width();
pWnd->MoveWindow(rec); //伸缩控件
}
Invalidate();

}

然后在类向导消息里面选择类名为CLeftDockDialog,并添加WM_SIZE响应函数

void CLeftDockDialog::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);

// TODO: 在此处添加消息处理程序代码
if (nType != SIZE_MINIMIZED) //判断窗口是不是最小化了,因为窗口最小化之后 ,窗口的长和宽会变成0,当前一次变化的时就会出现除以0的错误操作
{

               //在这里添加大小需要随对话框随之变化的控件ID
ChangeSize(IDC_STATIC1, cx, cy); //对每一个控件依次做调整
}
GetClientRect(&m_rect); //最后要更新对话框的大小,当做下一次变化的旧坐标
Invalidate();
}

这样控件的大小就会随对话框变化啦

猜你喜欢

转载自blog.csdn.net/weixin_41485242/article/details/79122556
今日推荐