动态布局控件

核心思想:

1,设置控件的起始位置和大小即可;

2,起始坐标计算法法是:计算 x坐标相对于 父窗口宽度的位置的百分比,计算 y坐标相对于 父窗口高度的位置的百分比

3,起始大小计算法法是:计算 长度 相对于 父窗口宽度的位置的百分比,计算 宽度相对于 父窗口高度的位置的百分比


计算百分比函数

void CMFCApplication2Dlg::addArray(CWnd *m_pwnd)
{
	CRect m_oldrect, m_rect;
	CContolChange *m_contrl = new CContolChange();
	m_contrl->m_wndColtol = m_pwnd;
	m_pwnd->GetWindowRect(&m_oldrect);
	//m_pwnd->GetClientRect(&m_rect);
	//m_pwnd->ClientToScreen(&m_rect);
	//m_pwnd->SetWindowPos(NULL, m_oldrect.left-8, m_oldrect.top-31, m_oldrect.Width(), m_oldrect.Height(), SWP_NOZORDER);
	m_pwnd->GetWindowRect(&m_oldrect);
	this->GetClientRect(&m_rect);

	m_contrl->m_xPersent = (float)m_oldrect.left / m_rect.Width();
	m_contrl->m_yPersent = (float)m_oldrect.top / m_rect.Height();
	m_contrl->m_widthPersen = (float)m_oldrect.Width() / m_rect.Width();
	m_contrl->m_heightPersent = (float)m_oldrect.Height() / m_rect.Height();
	m_controlManager.Add(m_contrl);
}


OnSize()布局

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

	int x, y;
	int width, height;
	int m_cnt = m_controlManager.GetCount();
	CContolChange *m_control;
	for (int i = 0; i < m_cnt; i++)
	{
		m_control = m_controlManager.GetAt(i);
		if (::IsWindow(m_testBtn.GetSafeHwnd()))
		{
			x = m_control->m_xPersent*cx;
			y = m_control->m_yPersent*cy;
			width = cx*m_control->m_widthPersen;
			height = cy*m_control->m_heightPersent;
			m_control->m_wndColtol->SetWindowPos(NULL, x-8, y-31, width, height, SWP_NOZORDER);
		}

	}

	// TODO: 在此处添加消息处理程序代码
}


源代码:http://download.csdn.net/detail/u010261063/9700996

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Car12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值