OnSize

void CtestOnSizeDlg::OnSize(UINT nType, int cx, int cy)
{
    CDialogEx::OnSize(nType, cx, cy);

    // m_OldRect在构造函数里初始化为0,所以当第一个调OnSize()的
    // 时候,缩放比例为1.0
    int nWidth = m_OldRect.right - m_OldRect.left;
    int nHeight = m_OldRect.bottom - m_OldRect.top;

    CRect wndRect;
    CWnd* pWnd = NULL;
    double xProp = nWidth == 0 ? 1.0 : cx / (double)(nWidth);
    double yProp = nHeight == 0 ? 1.0 : cy / (double)(nHeight);

    // .h file defined  CDWordArray m_ctrlInfo;
    // .cpp file Init
    // GetClientRect(&m_OldRect);
    // m_ctrlInfo.Add(ID);
    // m_ctrlInfo.Add(IDC_BUTTON1);

    for(int i = 0; i < m_ctrlInfo.GetSize(); i++)
    {
        pWnd = this->GetDlgItem(m_ctrlInfo[i]);
        if(NULL == pWnd)
            continue;

        pWnd->GetWindowRect(&wndRect);                      // 获取控件的屏幕坐标
        ScreenToClient(&wndRect);
        wndRect.left = (LONG)(wndRect.left * xProp);        // 计算转换后的客户区坐标
        wndRect.right = (LONG)(wndRect.right * xProp);
        wndRect.top = (LONG)(wndRect.top * yProp);
        wndRect.bottom = (LONG)(wndRect.bottom * yProp);
        pWnd->MoveWindow(wndRect);                          // MoveWindow()是针对客户区坐标的
    }

    this->GetClientRect(&m_OldRect);
}


// 响应用户的拖动,此时窗口尚未变更大小
void CtestOnSizeDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
    // fwSide 确定用户调整的方向
    // 取值1-8: Left:1, Right:2, Top:3, Bottom:6, Left+Right:4
    // Right+Top:5, Left+Bottom:7, Right+Bottom:8

    // pRect传入传出参数确定调整后的大小
    // 响应调整:根据用户调整的方向,当用户从左边调宽度时,我们也从左边调
    // 同理高度也是如此
    // 大小限制:当移动的大小超出我们设置的限制时,调整传入的pRect

    /*if(fwSide == 2 || fwSide == 5 || fwSide == 8)
    pRect->right = pRect->left + MinWidth;
    else
    pRect->left = pRect->right - MinWidth;

    if(fwSide == 6 || fwSide == 7 || fwSide == 8)
    pRect->bottom = pRect->top + MinHeight;
    else
    pRect->top = pRect->bottom - MinHeight;*/

    if((pRect->right - pRect->left) < 500)
        pRect->right = pRect->left + 500;
    if((pRect->bottom - pRect->top) < 300)
        pRect->bottom = pRect->top + 300;

    CDialogEx::OnSizing(fwSide, pRect); 
}


void CtestOnSizeDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
    // 下面四行代码限制对话框的最小尺寸,最小宽度为500px,最小高度为300px
    if(lpMMI->ptMinTrackSize.x <= 500)
        lpMMI->ptMinTrackSize.x = 500;
    if(lpMMI->ptMinTrackSize.y <= 300)
        lpMMI->ptMinTrackSize.y = 300;

    CDialogEx::OnGetMinMaxInfo(lpMMI);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值