MFC中的控件随窗口大小变化

1.在对话框的头文件中添加 
POINT old;


2.在OnInitialDlg()中添加


CRect rect;
GetClientRect(&rect);
old.x = rect.right - rect.left;
old.y = rect.bottom - rect.top;

3.在添加消息函数 OnSize()


if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)
{
resize();
}

4.resize()函数


void CMy12Dlg::resize(void)
{
float fsp[2];
POINT Newp;//获取现在对话框的大小
CRect recta;
GetClientRect(&recta);//取客户区的大小
Newp.x = recta.right - recta.left;
Newp.y = recta.bottom - recta.top;
fsp[0] = (float)Newp.x / old.x;
fsp[1] = (float)Newp.y / old.y;


CRect Rect;
int woc;
CPoint OldTLPoint,TLPoint;//左上角
CPoint OldBRPoint,BRPoint;//右下角
HWND hwndChild = ::GetWindow(m_hWnd,GW_CHILD);//列出所有控件


while(hwndChild)
{
woc = ::GetDlgCtrlID(hwndChild);//取得ID
GetDlgItem(woc)->GetWindowRect(Rect);
ScreenToClient(Rect);
OldTLPoint = Rect.TopLeft();
TLPoint.x = long(OldTLPoint.x * fsp[0]);
TLPoint.y = long(OldTLPoint.y * fsp[1]);
OldBRPoint = Rect.BottomRight();
BRPoint.x = long(OldBRPoint.x * fsp[0]);
BRPoint.y = long(OldBRPoint.y * fsp[1]);
Rect.SetRect(TLPoint,BRPoint);
GetDlgItem(woc)->MoveWindow(Rect,TRUE);
hwndChild = ::GetWindow(hwndChild,GW_HWNDNEXT);
}
old = Newp;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值