控件随对话框窗体大小而变化

.h文件中: POINT m_OldPoint;

.cpp文件中:

BOOL CPicturesShowDlg::OnInitDialog()

{

       CDialog::OnInitDialog();

 

       CRect rect

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

       m_OldPoint.x=rect.right-rect.left;

       m_OldPoint.y=rect.bottom-rect.top;

……

       return TRUE;

}

void CPicturesShowDlg::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

       {

              ResizeFrm();

       }

}

void CPicturesShowDlg::ResizeFrm()

{

       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/m_OldPoint.x;

       fsp[1]=(float)Newp.y/m_OldPoint.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); 

       }

       m_OldPoint=Newp;

}

如果你的父窗口是基于Formview的,那么只需要变化下面代码:

CRect rect; 

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

       m_OldPoint.x=rect.right-rect.left;

       m_OldPoint.y=rect.bottom-rect.top;

OnInitDialog()函数到OnDraw函数即可,然后

void CKTLXFunction::OnSize(UINT nType, int cx, int cy)

{

       CFormView::OnSize(nType, cx, cy);

       if((nType==SIZE_RESTORED||nType==SIZE_MAXIMIZED) && m_bIsInit)//窗体大小发生变动。处理函数resize

       {

              int woc;

              HWND  hwndChild=::GetWindow(m_hWnd,GW_CHILD);  //列出所有控件

              while(hwndChild

              { 

                     CRect Rect;

                     woc=::GetDlgCtrlID(hwndChild);//取得ID

                     GetDlgItem(woc)->GetWindowRect(&Rect);

                     ScreenToClient(&Rect);

                     Rect.left=Rect.left*cx/m_rect.Width();//调整控件大小

                     Rect.right=Rect.right*cx/m_rect.Width();

                     Rect.top=Rect.top*cy/m_rect.Height();

                     Rect.bottom=Rect.bottom*cy/m_rect.Height();

                     GetDlgItem(woc)->MoveWindow(Rect);//设置控件大小

                     hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);     //不要忘了这一条哦,否则,就会。。。。

              }

       }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值