MFC 基于对话框的控件动态改变大小

刚开始学习MFC,想着所有控件能够根据对话框的大小实时调整大小,总结了一下,共有三步;
第一步:窗体铺满全屏,读取窗体大小
ModifyStyle(WS_CAPTION, 0, 0);
SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0);
CRect rect;
GetClientRect(&rect);
Old.x = rect.right - rect.left;
Old.y = rect.bottom - rect.top;
第二步:添加消息
void CCPwelderDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)/窗体大小发生变化,处理函数resize/
{
resize();
}
}

第三步:添加重新调整大小函数
void CCPwelderDlg::resize()
{
POINT Newp;
CRect recta;
GetClientRect(&recta);
Newp.x = recta.right - recta.left;
Newp.y = recta.bottom - recta.top;
double zoom[2];
zoom[0] = (double)Newp.x / Old.x;
zoom[1] = (double)Newp.y / Old.y;
CRect Rect;
int hwndnum;
CPoint OldTLPoint, TLPoint;
CPoint OldBRPoint, BRPoint;
HWND hwndChild = ::GetWindow(m_hWnd, GW_CHILD);
while (hwndChild)
{
hwndnum = ::GetDlgCtrlID(hwndChild);
GetDlgItem(hwndnum)->GetWindowRect(Rect);
ScreenToClient(Rect);
OldTLPoint = Rect.TopLeft();
TLPoint.x = long(OldTLPoint.xzoom[0]);
TLPoint.y = long(OldTLPoint.y
zoom[1]);
OldBRPoint = Rect.BottomRight();
BRPoint.x = long(OldBRPoint.x *zoom[0]);
BRPoint.y = long(OldBRPoint.y *zoom[1]);
Rect.SetRect(TLPoint, BRPoint);
GetDlgItem(hwndnum)->MoveWindow(Rect, TRUE);
hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
}
Old = Newp;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值