// checkvw.cpp : implementation of the CCheckView class // // This is a part of the Microsoft Foundation Classes C++ library. // Copyright (C) 1992-1998 Microsoft Corporation // All rights reserved. // // This source code is only intended as a supplement to the // Microsoft Foundation Classes Reference and related // electronic documentation provided with the library. // See these sources for detailed information regarding the // Microsoft Foundation Classes product. #include "stdafx.h" #include "chkbook.h" #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNCREATE(CCheckView, CFormView) BEGIN_MESSAGE_MAP(CCheckView, CFormView) //{{AFX_MSG_MAP(CCheckView) ON_COMMAND(ID_EDIT_COMMIT_CHECK, OnEditCommitCheck) ON_EN_CHANGE(IDC_AMOUNTNUM, OnAmountNumChange) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Construction, destruction CCheckView::CCheckView() : CFormView(CCheckView::IDD) { //{{AFX_DATA_INIT(CCheckView) m_nCheckNo = 0; m_dwCents = 0; //}}AFX_DATA_INIT } CCheckView::~CCheckView() { } ///////////////////////////////////////////////////////////////////////////// // Operations void CCheckView::OnUpdate(CView*, LPARAM lHint, CObject* pHint) { // OnUpdate() is called whenever the document has changed and, // therefore, the view needs to redisplay some or all of itself. CChkBookDoc* pDoc = GetDocument(); if (pDoc->GetRecordCount() == 0) return; if (DYNAMIC_DOWNCAST(CFixedLenRecHint, pHint) != NULL) { m_nCheckNo = LOWORD(lHint) + pDoc->GetFirstCheckNo(); } else { m_nCheckNo = pDoc->GetActiveCheckNo(); } GetDocument()->GetCheck(m_nCheckNo, m_dwCents, m_strPayTo, m_strDate, m_strMemo); UpdateData(FALSE); // Copy the view form object's data to the // controls (via DoDataExchange). Invalidate(); // Repaint the entire form view. } void CCheckView::DoDataExchange(CDataExchange* pDX) { // ClassWizard maintains mappings between data of the CCheckView // class and the controls in the dialog template resource for this // form view. //{{AFX_DATA_MAP(CCheckView) DDX_Text(pDX, IDC_CHECKNO, m_nCheckNo); DDX_Text(pDX, IDC_DATE, m_strDate); DDX_Text(pDX, IDC_MEMO, m_strMemo); DDX_Text(pDX, IDC_PAYTO, m_strPayTo); DDX_DollarsCents(pDX, IDC_AMOUNTNUM, m_dwCents); //}}AFX_DATA_MAP // Update the written-out dollars and cents (eg, "nineteen and // 98/100ths dollars") after loading or saving the numeric // dollars and cents control (IDC_AMOUNTNUM). CString str = GetDollarsCentsText(m_dwCents); GetDlgItem(IDC_AMOUNTTEXT)->SetWindowText(str); } BOOL CCheckView::MaybeCommitDirtyCheck() { // Ask the user to confirm the discarding of uncommitted changes // to the active check. // Return FALSE if the user wants to cancel the change-selection // command that would have discarded the uncommitted changes; and // set the focus DWORD dwCents; CString strPayTo, strDate, strMemo; // If there is a validation error, then let UpdateData() // return focus to the offending control. if (!UpdateData()) return FALSE; CChkBookDoc* pDoc = GetDocument(); ASSERT(m_nCheckNo == pDoc->GetActiveCheckNo()); pDoc->GetCheck(m_nCheckNo, dwCents, strPayTo, strDate, strMemo); if ( (dwCents == m_dwCents) && (strPayTo == m_strPayTo) && (strDate == m_strDate) && (strMemo == m_strMemo)) return TRUE; switch (AfxMessageBox(IDS_PROMPT_COMMIT_DIRTY_CHECK, MB_YESNOCANCEL)) { case IDYES: pDoc->UpdateCheck(this, m_nCheckNo, m_dwCents, m_strPayTo, m_strDate, m_strMemo); return TRUE; case IDNO: return TRUE; case IDCANCEL: CMDIChildWnd* pChildWnd = (CMDIChildWnd*)GetParentFrame(); pChildWnd->GetMDIFrame()->MDIActivate(pChildWnd); } return FALSE; } ///////////////////////////////////////////////////////////////////////////// // CCheckView message handlers void CCheckView::OnEditCommitCheck() { // This handler is called when the user chooses the Edit Commit // Check menu command or toolbar button. // Copy dialog fields to the view object's data members. // If there are validation errors, then abandon the commit. if (!UpdateData()) return; ASSERT(m_nCheckNo == GetDocument()->GetActiveCheckNo()); // Update the document with the values entered by the user for // this check. GetDocument()->UpdateCheck(this, m_nCheckNo, m_dwCents, m_strPayTo, m_strDate, m_strMemo); } void CCheckView::OnAmountNumChange() { // When the dollar/cents amount numeric field (eg, "19.98") is changed // by the user, then update the dollar/cents text field // (eg, "Nineteen and 98/100ths Dollars"). DWORD dwCents; CWnd* pCtlAmountText = GetDlgItem(IDC_AMOUNTTEXT); if (GetDollarsCents(GetDlgItem(IDC_AMOUNTNUM), dwCents)) { CString str = GetDollarsCentsText(dwCents); pCtlAmountText->SetWindowText(str); } else { CString str; str.LoadString(IDS_UNKNOWN); pCtlAmountText->SetWindowText(str); } }