|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
AccExp.cpp : implementation file
CPropertyPage support for User mgmt wizard
File History:
JonY Apr-96 created
--*/
#include "stdafx.h"
#include "speckle.h"
#include "wizbased.h"
#include "AccExp.h"
#include <winreg.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CAccExp property page
IMPLEMENT_DYNCREATE(CAccExp, CWizBaseDlg)
CAccExp::CAccExp() : CWizBaseDlg(CAccExp::IDD) { //{{AFX_DATA_INIT(CAccExp)
m_sDayEdit = 0; m_sYearEdit = 0; m_sMonthEdit = 0; //}}AFX_DATA_INIT
CTime t = CTime::GetCurrentTime();
m_sDayEdit = t.GetDay(); m_sMonthEdit = t.GetMonth(); m_sYearEdit = t.GetYear() + 1; }
CAccExp::~CAccExp() { }
void CAccExp::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAccExp)
DDX_Control(pDX, IDC_STATIC2, m_cStatic2); DDX_Control(pDX, IDC_STATIC1, m_cStatic1); DDX_Control(pDX, IDC_DATE_SPIN, m_sbSpin); DDX_Text(pDX, IDC_MONTH_EDIT, m_csMonthEdit); DDX_Text(pDX, IDC_DAY_EDIT, m_csDayEdit); DDX_Text(pDX, IDC_YEAR_EDIT, m_csYearEdit); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAccExp, CWizBaseDlg) //{{AFX_MSG_MAP(CAccExp)
ON_EN_SETFOCUS(IDC_DAY_EDIT, OnSetfocusDayEdit) ON_EN_SETFOCUS(IDC_MONTH_EDIT, OnSetfocusMonthEdit) ON_EN_SETFOCUS(IDC_YEAR_EDIT, OnSetfocusYearEdit) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAccExp message handlers
BOOL CAccExp::OnInitDialog() { CWizBaseDlg::OnInitDialog(); GetDlgItem(IDC_DAY_EDIT)->EnableWindow(TRUE); GetDlgItem(IDC_MONTH_EDIT)->EnableWindow(TRUE); GetDlgItem(IDC_YEAR_EDIT)->EnableWindow(TRUE); GetDlgItem(IDC_DATE_SPIN)->EnableWindow(TRUE);
// get date format from registry
DWORD dwRet; HKEY hKey; DWORD cbProv = 0; TCHAR* lpProv = NULL;
dwRet = RegOpenKey(HKEY_CURRENT_USER, TEXT("Control Panel\\International"), &hKey );
TCHAR* lpSep;
// date separator
if ((dwRet = RegQueryValueEx( hKey, TEXT("sDate"), NULL, NULL, NULL, &cbProv )) == ERROR_SUCCESS) { lpSep = (TCHAR*)malloc(cbProv); if (lpSep == NULL) { AfxMessageBox(IDS_GENERIC_NO_HEAP, MB_ICONEXCLAMATION); ExitProcess(1); } dwRet = RegQueryValueEx( hKey, TEXT("sDate"), NULL, NULL, (LPBYTE) lpSep, &cbProv ); }
m_cStatic2.m_csDateSep = lpSep;
// only use one char
m_cStatic2.m_csDateSep = m_cStatic2.m_csDateSep.Left(1); m_cStatic1.m_csDateSep = m_cStatic2.m_csDateSep;
// date order
TCHAR* lpTemp; if ((dwRet = RegQueryValueEx( hKey, TEXT("sShortDate"), NULL, NULL, NULL, &cbProv )) == ERROR_SUCCESS) { lpTemp = (TCHAR*)malloc(cbProv); if (lpTemp == NULL) { AfxMessageBox(IDS_GENERIC_NO_HEAP, MB_ICONEXCLAMATION); ExitProcess(1); } dwRet = RegQueryValueEx( hKey, TEXT("sShortDate"), NULL, NULL, (LPBYTE) lpTemp, &cbProv ); }
// determine the order
TCHAR* pTemp = _tcstok(lpTemp, lpSep); USHORT xPos = 170; // left most control
USHORT yPos = 41; USHORT sCount = 0; while(pTemp != NULL) { CRect cr; if ((*pTemp == 'm') || (*pTemp == 'M')) { GetDlgItem(IDC_MONTH_EDIT)->SetWindowPos(0, xPos, yPos, 0, 0, SWP_NOSIZE | SWP_NOZORDER); GetDlgItem(IDC_MONTH_EDIT)->GetWindowRect(&cr); xPos += cr.Width(); }
else if ((*pTemp == 'd') || (*pTemp == 'D')) { GetDlgItem(IDC_DAY_EDIT)->SetWindowPos(0, xPos, yPos, 0, 0, SWP_NOSIZE | SWP_NOZORDER); GetDlgItem(IDC_DAY_EDIT)->GetWindowRect(&cr); xPos += cr.Width(); }
else if ((*pTemp == 'y') || (*pTemp == 'Y')) { GetDlgItem(IDC_YEAR_EDIT)->SetWindowPos(0, xPos, yPos, 0, 0, SWP_NOSIZE | SWP_NOZORDER); GetDlgItem(IDC_YEAR_EDIT)->GetWindowRect(&cr); xPos += cr.Width(); } if (sCount == 0) { GetDlgItem(IDC_STATIC1)->SetWindowPos(0, xPos, yPos, 0, 0, SWP_NOSIZE | SWP_NOZORDER); GetDlgItem(IDC_STATIC1)->GetWindowRect(&cr); xPos += cr.Width(); }
if (sCount == 1) { GetDlgItem(IDC_STATIC2)->SetWindowPos(0, xPos, yPos, 0, 0, SWP_NOSIZE | SWP_NOZORDER); GetDlgItem(IDC_STATIC2)->GetWindowRect(&cr); xPos += cr.Width(); } pTemp = _tcstok(NULL, lpSep); sCount++; }
free(lpTemp); free(lpSep); RegCloseKey(hKey);
// put the initial numeric values into the edit controls
TCHAR pTemp2[4]; wsprintf(pTemp2, L"%d", m_sDayEdit); m_csDayEdit = pTemp2; wsprintf(pTemp2, L"%d", m_sMonthEdit); m_csMonthEdit = pTemp2; wsprintf(pTemp2, L"%d", m_sYearEdit); m_csYearEdit = pTemp2;
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAccExp::OnSetfocusDayEdit() { m_sbSpin.SetBuddy(GetDlgItem(IDC_DAY_EDIT)); m_sbSpin.SetRange(1,31); }
void CAccExp::OnSetfocusMonthEdit() { m_sbSpin.SetBuddy(GetDlgItem(IDC_MONTH_EDIT)); m_sbSpin.SetRange(1,12); }
void CAccExp::OnSetfocusYearEdit() { m_sbSpin.SetBuddy(GetDlgItem(IDC_YEAR_EDIT)); m_sbSpin.SetRange(1996, 2030); }
LRESULT CAccExp::OnWizardNext() { UpdateData(TRUE);
// get the numberic values back out of the edit control(s)
m_sDayEdit = _wtoi((LPCTSTR)m_csDayEdit); m_sMonthEdit = _wtoi((LPCTSTR)m_csMonthEdit); m_sYearEdit = _wtoi((LPCTSTR)m_csYearEdit);
// check for valid values
USHORT sDays[] = {31,28,31,30,31,30,31,31,30,31,30,31};
// leap year?
if (((m_sYearEdit - 1992) % 4) == 0) sDays[1] = 29;
if ((m_sDayEdit > sDays[m_sMonthEdit - 1]) || (m_sDayEdit < 1)) { AfxMessageBox(IDS_INVALID_DAY); GetDlgItem(IDC_DAY_EDIT)->SetFocus(); return -1; }
if ((m_sMonthEdit > 12) || (m_sMonthEdit < 1)) { AfxMessageBox(IDS_INVALID_MONTH); GetDlgItem(IDC_MONTH_EDIT)->SetFocus(); return -1; }
if ((m_sYearEdit > 2030) || (m_sYearEdit < 1970)) { AfxMessageBox(IDS_INVALID_YEAR); GetDlgItem(IDC_YEAR_EDIT)->SetFocus(); return -1; }
CTime t = CTime::GetCurrentTime(); CTime tSet = CTime(m_sYearEdit, m_sMonthEdit, m_sDayEdit + 1, 23, 59, 59);
if (tSet < t) { if (AfxMessageBox(IDS_ALREADY_EXPIRED, MB_YESNO) != IDYES) return -1; }
// convert both values to GMT
struct tm* GMTTime; GMTTime = tSet.GetGmtTm(NULL); CTime tGMTSet = CTime((GMTTime->tm_year + 1900), GMTTime->tm_mon + 1, GMTTime->tm_mday, 0, 0, 30, GMTTime->tm_isdst);
CTime tStart = CTime(1970, 1, 1, 0, 0, 0); GMTTime = tStart.GetGmtTm(NULL); CTime tGMTStart = CTime((GMTTime->tm_year + 1900), GMTTime->tm_mon + 1, GMTTime->tm_mday, 0, 0, 0, GMTTime->tm_isdst);
CTimeSpan ct = tGMTSet - tGMTStart;
CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp(); pApp->m_dwExpirationDate = ct.GetTotalSeconds();
if (pApp->m_bHours) return IDD_HOURS_DLG; else if (pApp->m_bWorkstation) return IDD_LOGONTO_DLG; else if (pApp->m_bNW) return IDD_NWLOGON_DIALOG; else return IDD_FINISH; return CWizBaseDlg::OnWizardNext(); }
LRESULT CAccExp::OnWizardBack() { return IDD_RESTRICTIONS_DIALOG; }
/////////////////////////////////////////////////////////////////////////////
// CStaticDelim
CStaticDelim::CStaticDelim() { m_pFont = new CFont; LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT)); // Clear out structure.
lf.lfHeight = 15; _tcscpy(lf.lfFaceName, TEXT("Arial")); lf.lfWeight = 100; m_pFont->CreateFontIndirect(&lf); // Create the font.
}
CStaticDelim::~CStaticDelim() { delete m_pFont; }
BEGIN_MESSAGE_MAP(CStaticDelim, CStatic) //{{AFX_MSG_MAP(CStaticDelim)
ON_WM_PAINT() //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStaticDelim message handlers
void CStaticDelim::OnPaint() { CPaintDC dc(this); // device context for painting
dc.SetBkColor(RGB(255, 255, 255));
dc.SelectObject(m_pFont); dc.TextOut(0, 0, m_csDateSep); // Do not call CStatic::OnPaint() for painting messages
}
|