MFC界面控件自动缩放

99 篇文章 0 订阅
/*重写Onsize
*/
void CVehiclesim::OnSize(UINT nType, int cx, int cy)
{
    CDialog::OnSize(nType, cx, cy);//注意这里的范围
     
    if (cx <= 1 || cy <= 1 )
        return;
 
#ifdef _WIN32_WCE
    m_Grid.MoveWindow(0,0, cx,cy, FALSE);
#else
    CSize Translate(cx - m_OldSize.cx, cy - m_OldSize.cy);
    //枚举一个父窗口的所有子窗口
    ::EnumChildWindows(GetSafeHwnd(), EnumProc1, (LPARAM)&Translate);
    m_OldSize = CSize(cx,cy);
#endif
 
    CWnd *pWnd = GetDlgItem(IDC_SIZEBOXX);//窗体右下脚的拖动模块
    if (pWnd)
        pWnd->ShowWindow( (nType == SIZE_MAXIMIZED)? SW_HIDE : SW_SHOW);
}
 
/*对每一个控件进行调整,通常分类实现,如:按比例放大,只是位置发生变化,位置不变
*/
BOOL CALLBACK EnumProc1(HWND hwnd, LPARAM lParam)
{
    CWnd* pWnd = CWnd::FromHandle(hwnd);
    CSize* pTranslate = (CSize*) lParam;
 
 
 
    CVehiclesim* pDlg = (CVehiclesim*) pWnd->GetParent();
    if (!pDlg) return FALSE;
 
    CRect rect;
    pWnd->GetWindowRect(rect);
 
    pDlg->ScreenToClient(rect);
 
    if (hwnd == pDlg->s_pGrid.GetSafeHwnd() || hwnd == pDlg->s_static2.GetSafeHwnd())
    {//X,Y,不变  H,W变化
        pWnd->MoveWindow(rect.left, rect.top,                    rect.Width()+pTranslate->cx,                          rect.Height()+pTranslate->cy, FALSE);
    }
    else if (hwnd == pDlg->s_SendDatas.GetSafeHwnd() ||hwnd == pDlg->s_static1.GetSafeHwnd())
    {//X,W,Y不变  H变
        pWnd->MoveWindow(rect.left, rect.top, rect.Width(), rect.Height()+pTranslate->cy, FALSE);
 
    }
    else if(hwnd == pDlg->s_qingkong.GetSafeHwnd() || hwnd == pDlg->s_qingchu.GetSafeHwnd()
         ||hwnd == pDlg->s_shoudong.GetSafeHwnd() || hwnd == pDlg->s_zidong.GetSafeHwnd())
    {//X,W,H不变,Y变化
        pWnd->MoveWindow(rect.left, rect.top+pTranslate->cy,
                             rect.Width(), rect.Height(), FALSE);
    }
    else if(hwnd == pDlg->s_jisuan1.GetSafeHwnd() || hwnd == pDlg->s_jisuan2.GetSafeHwnd())
    {//X,W,H不变,Y变化
        pWnd->MoveWindow(rect.left, rect.top+pTranslate->cy,
                             rect.Width(), rect.Height(), FALSE);
    }
    else if(hwnd == pDlg->s_fanhui.GetSafeHwnd())
    {//X,Y变化   W,H不变
        pWnd->MoveWindow(rect.left + +pTranslate->cx, rect.top+pTranslate->cy,
                             rect.Width(), rect.Height(), FALSE);
    }
     
    else
    {
        if (pWnd->GetDlgCtrlID() == IDC_SIZEBOXX)//X,Y变化   W,H不变
            pWnd->MoveWindow(rect.left+pTranslate->cx, rect.top+pTranslate->cy,
                             rect.Width(), rect.Height(), FALSE);
        else//不变
            pWnd->MoveWindow(rect.left, rect.top, rect.Width(), rect.Height(), FALSE);
    }
    pDlg->Invalidate();
 
    return TRUE;
}
 
其他操作:
- 申明变量 CSize m_OldSize;
-  消息映射  ON_WM_SIZE()
-      在初始化函数中运行
        CRect rect;
    GetClientRect(rect);
    m_OldSize = CSize(rect.Width(), rect.Height());


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值