class CMainPic : public CDialog
{
// Construction
public:
struct CtrlPlace
{
CWnd *pCtrlWnd;
WINDOWPLACEMENT WP;
int Font;
bool IsValied;
}m_CtrlPlace[500];
CMyLineCtrl m_LineCtrl[41];
CMyLineCtrl m_BorderCtrl[51];
CMySignCtrl m_SignCtrl[51];
CMySignCtrl m_WindingCtrl[61];
CMySwitchCtrl m_SwitchCtrl[21];
//这些都是我的自绘控件};BOOL CMainPic::OnInitDialog() 
{
CDialog::OnInitDialog();
//记录所有控件位置
for(i=0;i<=30;i++)
{
m_LineCtrl[i].GetWindowPlacement(&m_CtrlPlace[i+10].WP);
m_CtrlPlace[i+10].pCtrlWnd=&m_LineCtrl[i];
m_CtrlPlace[i+10].IsValied=true;
m_CtrlPlace[i+10].Font=0;
}
for(i=0;i<=40;i++)
{
m_SignCtrl[i].GetWindowPlacement(&m_CtrlPlace[i+50].WP);
m_CtrlPlace[i+50].pCtrlWnd=&m_SignCtrl[i];
m_CtrlPlace[i+50].IsValied=true;
m_CtrlPlace[i+50].Font=0;
}
for(i=0;i<=15;i++)
{
m_SwitchCtrl[i].GetWindowPlacement(&m_CtrlPlace[i+100].WP);
m_CtrlPlace[i+100].pCtrlWnd=&m_SwitchCtrl[i];
m_CtrlPlace[i+100].IsValied=true;
m_CtrlPlace[i+100].Font=0;
}
for(i=0;i<=60;i++)
{
m_WindingCtrl[i].GetWindowPlacement(&m_CtrlPlace[i+130].WP);
m_CtrlPlace[i+130].pCtrlWnd=&m_WindingCtrl[i];
m_CtrlPlace[i+130].IsValied=true;
m_CtrlPlace[i+130].Font=0;
}
for(i=0;i<=80;i++)
{
m_LabelCtrl[i].GetWindowPlacement(&m_CtrlPlace[i+200].WP);
m_CtrlPlace[i+200].pCtrlWnd=&m_LabelCtrl[i];
m_CtrlPlace[i+200].IsValied=true;
m_CtrlPlace[i+200].Font=m_LabelCtrl[i].GetFontSize();
}
for(i=0;i<=50;i++)
{
m_BorderCtrl[i].GetWindowPlacement(&m_CtrlPlace[i+300].WP);
m_CtrlPlace[i+300].pCtrlWnd=&m_BorderCtrl[i];
m_CtrlPlace[i+300].IsValied=true;
m_CtrlPlace[i+300].Font=0;
}
Zoom(2);
}void CMainPic::Zoom(float Zoom)
{
int i;
if (Zoom!=0)
{
m_nZoom/=Zoom;
if(m_nZoom<=0.48||m_nZoom>=2)
{
m_nZoom*=Zoom;
return;
}
}
else
{
m_nZoom=0.5;
}
WINDOWPLACEMENT wp;
Invalidate(false);
for(i=0;i<=500;i++)
{
if(m_CtrlPlace[i].IsValied)
{
wp=m_CtrlPlace[i].WP;
wp.rcNormalPosition.left*=m_nZoom;
wp.rcNormalPosition.right*=m_nZoom;
wp.rcNormalPosition.top*=m_nZoom;
wp.rcNormalPosition.bottom*=m_nZoom;
m_CtrlPlace[i].pCtrlWnd->
SetWindowPlacement(&wp);
if(m_CtrlPlace[i].Font!=0)
((CLabel*)m_CtrlPlace[i].pCtrlWnd)->
SetFontSize(m_CtrlPlace[i].Font*m_nZoom);
}
} Invalidate();
}