VS2013 MFC 对话框控件大小随窗口大小改变而改变

窗口大小改变后控件大小也随之改变

在对话框头文件中定义

头文件名称:项目名称Dlg.h

POINT Old;//存放对话框的宽和高。

对话框cpp中初始化

cpp文件名称:项目名称Dlg.cpp
在OnInitDialog()函数中添加

CRect rect;
GetClientRect(&rect); //取客户区大小   
Old.x = rect.right - rect.left;
Old.y = rect.bottom - rect.top;

添加WM_SIZE消息

在类向导中为对话框类添加WM_SIZE消息,如图
添加WM_SIZE消息
然后编辑代码,在函数中添加以下代码

void C枪支编码识别Dlg::OnSize(UINT nType, int cx, int cy)

{
CDialogEx::OnSize(nType, cx, cy);

// TODO:  在此处添加消息处理程序代码
if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)//窗体大小发生变动。处理程序
{
    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]); //高度不可读的控件(如:combBox),不要改变此值.
        Rect.SetRect(TLPoint, BRPoint);
        GetDlgItem(woc)->MoveWindow(Rect, TRUE);
        hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
    }
    Old = Newp;
}

}

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值