// demoDlg.cpp : implementation file // #include "stdafx.h" #include "demo.h" #include "demoDlg.h" #include "UTSampleAbout.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDemoDlg dialog CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/) : CDialog(CDemoDlg::IDD, pParent) { //{{AFX_DATA_INIT(CDemoDlg) m_sBalance = _T(""); m_sCompany = _T(""); m_sCustnum = _T(""); m_sDate = _T(""); m_sEmail = _T(""); m_sFirstName = _T(""); m_sLastName = _T(""); m_sPhone = _T(""); m_bOldCustomer = FALSE; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_add = FALSE; m_isDirty = FALSE; } void CDemoDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDemoDlg) DDX_Control(pDX, IDC_PHONE, m_ctlEditPhone); DDX_Control(pDX, IDC_LASTNAME, m_ctlEditLastName); DDX_Control(pDX, IDC_FIRSTNAME, m_ctlEditFirstName); DDX_Control(pDX, IDC_EMAIL, m_ctlEditEmail); DDX_Control(pDX, IDC_DATE, m_ctlEditDate); DDX_Control(pDX, IDC_CUSTNUM, m_ctlEditCustnum); DDX_Control(pDX, IDC_COMPANY, m_ctlEditCompany); DDX_Control(pDX, IDC_BALANCE, m_ctlEditBalance); DDX_Text(pDX, IDC_BALANCE, m_sBalance); DDX_Text(pDX, IDC_COMPANY, m_sCompany); DDX_Text(pDX, IDC_CUSTNUM, m_sCustnum); DDX_Text(pDX, IDC_DATE, m_sDate); DDX_Text(pDX, IDC_EMAIL, m_sEmail); DDX_Text(pDX, IDC_FIRSTNAME, m_sFirstName); DDX_Text(pDX, IDC_LASTNAME, m_sLastName); DDX_Text(pDX, IDC_PHONE, m_sPhone); DDX_Check(pDX, IDC_CHECK_OLDCUSTOMER, m_bOldCustomer); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDemoDlg, CDialog) //{{AFX_MSG_MAP(CDemoDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ADD, OnAdd) ON_BN_CLICKED(IDC_DELETE, OnDelete) ON_BN_CLICKED(IDC_FIRST, OnFirst) ON_BN_CLICKED(IDC_NEXT, OnNext) ON_BN_CLICKED(IDC_PREV, OnPrev) ON_BN_CLICKED(IDC_LAST, OnLast) ON_BN_CLICKED(IDC_SAVE, OnSave) ON_CONTROL_RANGE(EN_CHANGE,IDC_LASTNAME,IDC_BALANCE, OnChange) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDemoDlg message handlers BOOL CDemoDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here CString string = GetAppDir(); string += "\\customer.mdb"; if(m_dao.Open(string,_T("info")) != TRUE){ MessageBox(_T("Database Failed To Open, make sure that the database is in the program directory"), _T("Error"),MB_OK); EndDialog(0); } else{ LoadRecord(); } return TRUE; // return TRUE unless you set the focus to a control } void CDemoDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CUTSampleAboutDlg dlgAbout(IDR_MAINFRAME,ID_DESCRIPTION_FILE); dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CDemoDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CDemoDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CDemoDlg::OnAdd() { // TODO: Add your control notification handler code here ClearDialog(); m_dao.Add(); m_add = TRUE; } void CDemoDlg::OnDelete() { // TODO: Add your control notification handler code here m_dao.Delete(); LoadRecord(); } void CDemoDlg::OnFirst() { // TODO: Add your control notification handler code here m_dao.MoveFirst(); LoadRecord(); } void CDemoDlg::OnPrev() { // TODO: Add your control notification handler code here if(m_dao.IsBOF() == TRUE) return; m_dao.MovePrev(); LoadRecord(); } void CDemoDlg::OnNext() { // TODO: Add your control notification handler code here if(m_dao.IsEOF() == TRUE) return; m_dao.MoveNext(); LoadRecord(); } void CDemoDlg::OnLast() { // TODO: Add your control notification handler code here m_dao.MoveLast(); LoadRecord(); } void CDemoDlg::ClearDialog() { m_sCustnum.Empty(); m_sDate.Empty(); m_sLastName.Empty(); m_sFirstName.Empty(); m_sCompany.Empty(); m_sPhone.Empty(); m_sEmail.Empty(); m_sBalance.Empty(); UpdateData(FALSE); } void CDemoDlg::SaveRecord() { CString string; COleDateTime dt; COleCurrency cy; VERIFY(UpdateData()); if(m_add) m_dao.Add(); else m_dao.Edit(); GetDlgItemText(IDC_LASTNAME,string); m_dao.SetField(m_dao.GFN(_T("LastName")),(LPCTSTR)string); GetDlgItemText(IDC_FIRSTNAME,string); m_dao.SetField(m_dao.GFN(_T("FirstName")),(LPCTSTR)string); GetDlgItemText(IDC_COMPANY,string); m_dao.SetField(m_dao.GFN(_T("Company")),(LPCTSTR)string); GetDlgItemText(IDC_PHONE,string); m_dao.SetField(m_dao.GFN(_T("Phone")),(LPCTSTR)string); GetDlgItemText(IDC_EMAIL,string); m_dao.SetField(m_dao.GFN(_T("EMail")),(LPCTSTR)string); GetDlgItemText(IDC_BALANCE,string); cy.ParseCurrency(string); m_dao.SetField(m_dao.GFN(_T("Balance")),cy); m_dao.SetField(m_dao.GFN(_T("Old customer")),m_bOldCustomer); //get the current date if(m_add){ dt = COleDateTime::GetCurrentTime(); m_dao.SetField(m_dao.GFN(_T("Date")),dt); } m_dao.Update(); m_add = FALSE; m_isDirty = FALSE; } void CDemoDlg::LoadRecord() { //check to see if editing or adding was in progress if(m_isDirty){ if(MessageBox(_T("Do you want to save your changes?"), _T("Save Changes"),MB_YESNO) == IDYES) SaveRecord(); } CString string; COleDateTime dt; COleCurrency cy; if(m_dao.IsEOF() || m_dao.IsBOF()){ ClearDialog(); return; } m_dao.GetField(m_dao.GFN(_T("CustNum")),m_sCustnum); // m_dao.GetField(m_dao.GFN(_T("Date")),dt); // m_sDate=dt.Format(); if(!m_dao.GetField(m_dao.GFN(_T("Date")),dt)/* && dt.m_status==COleDateTime::null*/) { m_sDate=_T(""); } else m_sDate=dt.Format(); m_dao.GetField(m_dao.GFN(_T("LastName")),m_sLastName); m_dao.GetField(m_dao.GFN(_T("FirstName")),m_sFirstName); m_dao.GetField(m_dao.GFN(_T("Company")),m_sCompany); m_dao.GetField(m_dao.GFN(_T("Phone")),m_sPhone); m_dao.GetField(m_dao.GFN(_T("EMail")),m_sEmail); m_dao.GetField(m_dao.GFN(_T("Balance")),cy); m_sBalance=cy.Format(); m_dao.GetField(m_dao.GFN(_T("Old customer")),m_bOldCustomer); UpdateData(FALSE); m_isDirty = FALSE; } CString CDemoDlg::GetAppDir(){ LPTSTR clStr = GetCommandLine(); LPTSTR buf; CString string; int loop; //create the temp buffer buf = new TCHAR[ lstrlen(clStr) + 1 ]; //copy the command line and check to see if the first character is a quote if(clStr[0] == '\"') lstrcpy(buf,&clStr[1]); else lstrcpy(buf,clStr); //check to see if the command line is empty loop = 0; if(lstrlen(buf) > 0){ loop = lstrlen(buf); while(loop > 0){ if(buf[loop]== _T('.')){ break; } loop --; } while(loop > 0){ if(buf[loop]== _T('\\')){ buf[loop] = 0; break; } loop --; } } if(loop == 0){ delete[] buf; //create the temp buffer buf = new TCHAR[MAX_PATH + 1]; _tgetcwd(buf,255); } string = buf; delete[] buf; return string; } void CDemoDlg::OnSave() { // TODO: Add your control notification handler code here SaveRecord(); } void CDemoDlg::OnChange(UINT nParam) { UNREFERENCED_PARAMETER(nParam); // TODO: Add your control notification handler code here m_isDirty = TRUE; }