더북(TheBook)

앞에서 설명한 CResizeDlg 클래스 멤버 함수의 소스 코드를 모두 정리하여 소스 9-7에 나타내었다.

소스 9-7 ResizeDlg.cpp 파일 전체 코드(ResizeDlg.cpp)
CResizeDlg::CResizeDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(IDD_RESIZE, pParent)
    , m_nOldWidth(0)
    , m_nOldHeight(0)
    , m_nNewWidth(0)
    , m_nNewHeight(0)
    , m_bAspectRatio(TRUE)
    , m_nInterpolation(0)
{
}
…
BOOL CResizeDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    ((CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_WIDTH))->SetRange(1, 4096);
    ((CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_HEIGHT))->SetRange(1, 4096);

    m_nNewWidth = m_nOldWidth;
    m_nNewHeight = m_nOldHeight;
    UpdateData(FALSE);

    return TRUE;   // return TRUE unless you set the focus to a control
                   // 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}

void CResizeDlg::OnEnChangeNewWidth()
{
    if (GetDlgItem(IDC_INTERPOLATION) == NULL)
        return;

    if (m_bAspectRatio)
    {
        UpdateData(TRUE);
        m_nNewHeight = m_nNewWidth * m_nOldHeight / m_nOldWidth;
        UpdateData(FALSE);
    }
}

void CResizeDlg::OnEnChangeNewHeight()
{
    if (GetDlgItem(IDC_INTERPOLATION) == NULL)
        return;

    if (m_bAspectRatio)
    {
        UpdateData(TRUE);
        m_nNewWidth = m_nNewHeight * m_nOldWidth / m_nOldHeight;
        UpdateData(FALSE);
    }
}

void CResizeDlg::OnBnClickedAspectRatio()
{
    UpdateData(TRUE);

    if (m_bAspectRatio)
    {
        m_nNewHeight = m_nNewWidth * m_nOldHeight / m_nOldWidth;
        UpdateData(FALSE);
    }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.