对话框自适应大小ReSize

1.在对话框头文件中添加

POINT old;
void Resize();

2.在对话框初始化函数中OnInitDialog 添加以下代码

CRect rect;
GetClientRect(&rect);
old.x = rect.right - rect.left;
old.y = rect.bottom - rect.top;
int cx = GetSystemMetrics(SM_CXFULLSCREEN);
int cy = GetSystemMetrics(SM_CYFULLSCREEN);

3.在对话框的OnSize()函数中添加

// 最小化的时候不进行控件更新绘制 
if (nType != SIZE_MINIMIZED)
{ 
    Resize(); 
}

4.添加Resize()函数

void CWeldCtlDlg::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;

    //如果变化率太小则不改变
    if (abs(fsp[0] - 1)< 0.05 && abs(fsp[1] - 1) < 0.05)
    {
        return;
    }

    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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值