控件随dialog最大化而按比例变大

1、映射消息

      ON_WM_SIZE()

2、函数声明

      afx_msg void OnSize(UINT nType, int cx, int cy);

3、函数实现

      void CMFCPlayDlg::OnSize(UINT nType, int cx, int cy)
     {
              CDialog::OnSize(nType, cx, cy);

               // TODO: Add your message handler code here
               if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)
               {
                       resize();
               }
     }

4、定义变量

      POINT     Old;

      CRect m_rect;

      GetClientRect(&m_rect);     //取客户区大小 

      Old.x = m_rect.right - m_rect.left;

      Old.y = m_rect.bottom - m_rect.top;

5、resize函数实现

   

void resize()
{
    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;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值