您的位置:首页 > 其它

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

2013-08-21 18:50 281 查看
.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);     //不要忘了这一条哦,否则,就会。。。。
              }
       }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息