//---------------------------------------------------------------------------- // EgalTech 2013-2014 //---------------------------------------------------------------------------- // File : KeyGeneratorDlg.cpp Data : 11.09.14 Versione : 1.5i2 // Contenuto : Implementazione della classe dialogo generatore chiavi. // // // // Modifiche : 11.09.14 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "afxdialogex.h" #include "resource.h" #include "KeyGenerator.h" #include "KeyGeneratorDlg.h" #include "KeyMaker.h" #include "/EgtDev/Include/EGnStringUtils.h" #include "/EgtDev/Include/EGnStringConverter.h" #include "/EgtDev/Include/EgtIniFile.h" using namespace std ; //---------------------------------------------------------------------------- #ifdef _DEBUG #define new DEBUG_NEW #endif //---------------------------------------------------------------------------- // CAboutDlg dialog used for App About //---------------------------------------------------------------------------- class CAboutDlg : public CDialogEx { public : CAboutDlg( void) ; protected : BOOL OnInitDialog( void) ; DECLARE_MESSAGE_MAP() } ; //---------------------------------------------------------------------------- CAboutDlg::CAboutDlg( void) : CDialogEx( IDD_ABOUTBOX) { } //---------------------------------------------------------------------------- BOOL CAboutDlg::OnInitDialog( void) { CDialog::OnInitDialog() ; GetDlgItem( IDC_EXEVER)->SetWindowText( stringtoW( GetExeNameVer())) ; return TRUE ; } //---------------------------------------------------------------------------- BEGIN_MESSAGE_MAP( CAboutDlg, CDialogEx) END_MESSAGE_MAP() //---------------------------------------------------------------------------- // CKeyDlg dialog used for Key visualization //---------------------------------------------------------------------------- class CKeyDlg : public CDialogEx { public : CKeyDlg( const string& sKey) ; protected : BOOL OnInitDialog( void) ; private : string m_sKey ; DECLARE_MESSAGE_MAP() } ; //---------------------------------------------------------------------------- CKeyDlg::CKeyDlg( const string& sKey) : CDialogEx( IDD_KEYBOX) { m_sKey = sKey ; } //---------------------------------------------------------------------------- BOOL CKeyDlg::OnInitDialog( void) { CDialog::OnInitDialog() ; GetDlgItem( IDC_KEY)->SetWindowText( stringtoW( m_sKey)) ; return TRUE ; } //---------------------------------------------------------------------------- BEGIN_MESSAGE_MAP( CKeyDlg, CDialogEx) END_MESSAGE_MAP() //---------------------------------------------------------------------------- // CKeyGeneratorDlg dialog //---------------------------------------------------------------------------- CKeyGeneratorDlg::CKeyGeneratorDlg( CWnd* pParent) : CDialogEx( IDD_KEYGENERATOR_DIALOG) { m_hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME) ; } //---------------------------------------------------------------------------- BEGIN_MESSAGE_MAP( CKeyGeneratorDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED( ID_GENER, OnGenerate) ON_WM_CLOSE() END_MESSAGE_MAP() //---------------------------------------------------------------------------- BOOL CKeyGeneratorDlg::OnInitDialog( void) { CDialogEx::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) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); 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 // Assegno ultimi valori inseriti string sCust = GetPrivateProfileStringUtf8( "Data", "Customer", "", AfxGetApp()->m_pszProfileName) ; GetDlgItem( IDC_CUSTOMER)->SetWindowTextW( stringtoW( sCust)) ; string sMachId = GetPrivateProfileStringUtf8( "Data", "MachineId", "", AfxGetApp()->m_pszProfileName) ; GetDlgItem( IDC_MACHID)->SetWindowTextW( stringtoW( sMachId)) ; int nSelProd = GetPrivateProfileInt( "Data", "SelProduct", 0, AfxGetApp()->m_pszProfileName) ; ((CComboBox*)GetDlgItem( IDC_PROD))->SetCurSel( nSelProd) ; int nSelVer = GetPrivateProfileInt( "Data", "SelVer", 0, AfxGetApp()->m_pszProfileName) ; ((CComboBox*)GetDlgItem( IDC_VER))->SetCurSel( nSelVer) ; int nSelLev = GetPrivateProfileInt( "Data", "SelLev", 0, AfxGetApp()->m_pszProfileName) ; ((CComboBox*)GetDlgItem( IDC_LEV))->SetCurSel( nSelLev) ; int nExpTime = GetPrivateProfileInt( "Data", "ExpTime", 0, AfxGetApp()->m_pszProfileName) ; if ( nExpTime != 0) ((CDateTimeCtrl*)GetDlgItem( IDC_EXPIRATION))->SetTime( &CTime( nExpTime)) ; return TRUE ; // return TRUE unless you set the focus to a control } //---------------------------------------------------------------------------- void CKeyGeneratorDlg::OnSysCommand( UINT nID, LPARAM lParam) { if ( ( nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout ; dlgAbout.DoModal() ; } else { CDialogEx::OnSysCommand( nID, lParam) ; } } //---------------------------------------------------------------------------- void CKeyGeneratorDlg::OnPaint( void) { if ( IsIconic()) { CPaintDC dc( this) ; // device context for painting SendMessage( WM_ICONERASEBKGND, reinterpret_cast(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 { CDialogEx::OnPaint() ; } } //---------------------------------------------------------------------------- HCURSOR CKeyGeneratorDlg::OnQueryDragIcon( void) { return static_cast( m_hIcon) ; } //---------------------------------------------------------------------------- void CKeyGeneratorDlg::OnCancel( void) { } //---------------------------------------------------------------------------- void CKeyGeneratorDlg::OnClose( void) { EndDialog( IDCANCEL) ; } //---------------------------------------------------------------------------- void CKeyGeneratorDlg::OnGenerate( void) { KeyMaker mKey ; CStringW wszTemp ; // recupero il cliente GetDlgItem( IDC_CUSTOMER)->GetWindowTextW( wszTemp) ; string sCust = wstrztoA( wszTemp) ; if ( ! mKey.SetCustomer( sCust)) { AfxMessageBox( L"Dati cliente vuoto o con caratteri vietati (\\/:*?\"<>|)") ; return ; } WritePrivateProfileStringUtf8( "Data", "Customer", sCust.c_str(), AfxGetApp()->m_pszProfileName) ; // recupero l'identificativo macchina (tipo 2) GetDlgItem( IDC_MACHID)->GetWindowTextW( wszTemp) ; string sMachId = wstrztoA( wszTemp) ; if ( ! mKey.SetMachineId( sMachId)) { AfxMessageBox( L"Id Macchina vuoto o errato") ; return ; } WritePrivateProfileStringUtf8( "Data", "MachineId", sMachId.c_str(), AfxGetApp()->m_pszProfileName) ; // recupero il prodotto GetDlgItem( IDC_PROD)->GetWindowTextW( wszTemp) ; string sProd = wstrztoA( wszTemp) ; if ( ! mKey.SetProduct( sProd)) { AfxMessageBox( L"Prodotto vuoto o errato") ; return ; } int nSelProd = ((CComboBox*)GetDlgItem( IDC_PROD))->GetCurSel() ; nSelProd = max( nSelProd, 0) ; WritePrivateProfileInt( "Data", "SelProduct", nSelProd, AfxGetApp()->m_pszProfileName) ; // recupero la versione GetDlgItem( IDC_VER)->GetWindowTextW( wszTemp) ; string sVer = wstrztoA( wszTemp) ; if ( ! mKey.SetVersion( sVer)) { AfxMessageBox( L"Versione vuota o errata") ; return ; } int nSelVer = ((CComboBox*)GetDlgItem( IDC_VER))->GetCurSel() ; nSelVer = max( nSelVer, 0) ; WritePrivateProfileInt( "Data", "SelVer", nSelVer, AfxGetApp()->m_pszProfileName) ; // recupero il livello GetDlgItem( IDC_LEV)->GetWindowTextW( wszTemp) ; string sLev = wstrztoA( wszTemp) ; if ( ! mKey.SetLevel( sLev)) { AfxMessageBox( L"Livello vuoto o errato") ; return ; } int nSelLev = ((CComboBox*)GetDlgItem( IDC_LEV))->GetCurSel() ; nSelLev = max( nSelLev, 0) ; WritePrivateProfileInt( "Data", "SelLev", nSelLev, AfxGetApp()->m_pszProfileName) ; // recupero la data di scadenza int nDays ; CTime tTime ; if ( ((CDateTimeCtrl*)GetDlgItem( IDC_EXPIRATION))->GetTime( tTime) == GDT_VALID) nDays = int( tTime.GetTime() / ( 24 * 3600)) ; else nDays = - 1 ; if ( ! mKey.SetExpirDays( nDays)) { AfxMessageBox( L"Inserisci una Data valida") ; return ; } WritePrivateProfileInt( "Data", "ExpTime", int( tTime.GetTime()), AfxGetApp()->m_pszProfileName) ; // recupero le opzioni unsigned int nOpt1 = 0 ; for ( int i = IDC_CHECK01, j = 0 ; i <= IDC_CHECK16 ; ++ i, ++ j) { if ( ((CButton*)GetDlgItem( i))->GetCheck() == BST_CHECKED) nOpt1 += ( 1 << j) ; } unsigned int nOpt2 = 0 ; if ( ! mKey.SetOptions( nOpt1, nOpt2)) { AfxMessageBox( L"Inserisci Opzioni valide") ; return ; } // recupero la data di scadenza delle opzioni int nOptDays ; CTime tOptTime ; if ( ((CDateTimeCtrl*)GetDlgItem( IDC_OPT_EXPIR))->GetTime( tOptTime) == GDT_VALID) nOptDays = int( tOptTime.GetTime() / ( 24 * 3600)) ; else nOptDays = - 1 ; if ( ! mKey.SetOptExpirDays( nOptDays)) { AfxMessageBox( L"Inserisci una Data valida per le opzioni") ; return ; } // calcolo la chiave if ( ! mKey.CalcKey()) { AfxMessageBox( L"Errore nel calcolo della chiave") ; return ; } string sKey ; mKey.GetKey( sKey) ; // salvo i dati if ( ! mKey.SaveData()) AfxMessageBox( L"Errore nel salvataggio dei dati") ; // visualizzo i risultanti CKeyDlg dlgKey( sKey) ; dlgKey.DoModal() ; }