#include "stdafx.h" #include "newcondlg.h" #include "browsedlg.h" #include "resource.h" #include "validate.h" CNewConDlg* CNewConDlg::m_pThis = NULL; CNewConDlg::CNewConDlg(HWND hWndOwner, HINSTANCE hInst) : m_hWnd(hWndOwner), m_hInst(hInst) { m_pThis = this; // // Password saving is disabled by default // m_bSavePassword = FALSE; // // Connect to console is enabled by default // m_bConnectToConsole = TRUE; ZeroMemory(m_szServer, sizeof(m_szServer)); ZeroMemory(m_szDescription, sizeof(m_szDescription)); ZeroMemory(m_szUserName, sizeof(m_szUserName)); ZeroMemory(m_szPassword, sizeof(m_szPassword)); ZeroMemory(m_szDomain, sizeof(m_szDomain)); } CNewConDlg::~CNewConDlg() { ZeroPasswordMemory(); } INT_PTR CNewConDlg::DoModal() { INT_PTR retVal; retVal = DialogBox( m_hInst,MAKEINTRESOURCE(IDD_NEWCON), m_hWnd, StaticDlgProc); return retVal; } INT_PTR CALLBACK CNewConDlg::StaticDlgProc(HWND hDlg,UINT uMsg, WPARAM wParam, LPARAM lParam) { // // need access to class variables so redirect to non-static version of callback // return m_pThis->DlgProc(hDlg,uMsg,wParam,lParam); } INT_PTR CNewConDlg::DlgProc(HWND hDlg,UINT uMsg, WPARAM wParam, LPARAM) { switch (uMsg) { case WM_INITDIALOG: { //Limit length of these edit boxes SendMessage(GetDlgItem(hDlg, IDC_DESCRIPTION), EM_LIMITTEXT, CL_MAX_DESC_LENGTH, 0); SendMessage(GetDlgItem(hDlg, IDC_SERVER), EM_LIMITTEXT, CL_MAX_DOMAIN_LENGTH, 0); SendMessage(GetDlgItem(hDlg, IDC_USERNAME), EM_LIMITTEXT, CL_MAX_USERNAME_LENGTH, 0); SendMessage(GetDlgItem(hDlg, IDC_PASSWORD), EM_LIMITTEXT, CL_MAX_PASSWORD_EDIT, 0); SendMessage(GetDlgItem(hDlg, IDC_DOMAIN), EM_LIMITTEXT, CL_MAX_DOMAIN_LENGTH, 0); //Save password settings SendMessage(GetDlgItem(hDlg, IDC_SAVE_PASSWORD), BM_SETCHECK, m_bSavePassword ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); //Connect to console settings SendMessage(GetDlgItem(hDlg, IDC_CONNECT_TO_CONSOLE), BM_SETCHECK, m_bConnectToConsole ? (WPARAM)BST_CHECKED : (WPARAM)BST_UNCHECKED, 0); EnableWindow(GetDlgItem(hDlg, IDC_USERNAME), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_PASSWORD), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_DOMAIN), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_USERNAME_STATIC), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_PASSWORD_STATIC), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_DOMAIN_STATIC), TRUE); SetFocus(GetDlgItem(hDlg, IDC_SERVER)); break; // WM_INITDIALOG } case WM_COMMAND: { if (BN_CLICKED == HIWORD(wParam)) { if (IDCANCEL == (int) LOWORD(wParam)) { // // Cancel out of the dialog // EndDialog( hDlg, IDCANCEL); } else if (IDOK == (int) LOWORD(wParam)) { // // Ok button pressed // validate and store dialog settings // // todo: validate here. if (!CValidate::Validate(hDlg, m_hInst)) { return FALSE; } //Retrieve the data to be stored. GetDlgItemText(hDlg, IDC_DESCRIPTION, m_szDescription, MAX_PATH); GetDlgItemText(hDlg, IDC_SERVER, m_szServer, MAX_PATH); if (!lstrcmp( m_szDescription, L"")) { //if no description is specified. Default to the server name //todo: check for existing server lstrcpy(m_szDescription, m_szServer); } // // Get user/pass/domain // GetDlgItemText(hDlg, IDC_USERNAME, m_szUserName, CL_MAX_USERNAME_LENGTH - 1); GetDlgItemText(hDlg, IDC_PASSWORD, m_szPassword, CL_MAX_PASSWORD_LENGTH_BYTES / sizeof(TCHAR) - 1); GetDlgItemText(hDlg, IDC_DOMAIN, m_szDomain, CL_MAX_DOMAIN_LENGTH -1); if (BST_CHECKED == IsDlgButtonChecked(hDlg, IDC_SAVE_PASSWORD)) { m_bSavePassword = TRUE; } else { m_bSavePassword = FALSE; } if(BST_CHECKED == IsDlgButtonChecked(hDlg, IDC_CONNECT_TO_CONSOLE)) { m_bConnectToConsole = TRUE; } else { m_bConnectToConsole = FALSE; } EndDialog( hDlg, IDOK); } if (IDC_BROWSE_SERVERS == LOWORD(wParam)) { INT_PTR nResult = IDCANCEL; CBrowseDlg dlg( hDlg, m_hInst); nResult = dlg.DoModal(); if (-1 == nResult) { ODS(L"DialogBox failed newcondlg.cpp\n"); } if (IDOK == nResult) { SetDlgItemText(hDlg, IDC_SERVER, dlg.GetServer()); // // set connection name as well if necessary // TCHAR szDesc[CL_MAX_DESC_LENGTH]; GetDlgItemText(hDlg, IDC_DESCRIPTION, szDesc, CL_MAX_DESC_LENGTH); if(!lstrcmp(szDesc, L"")) { SetDlgItemText(hDlg, IDC_DESCRIPTION, dlg.GetServer()); } } SetFocus(hDlg); } } else if (EN_KILLFOCUS == HIWORD(wParam)) { if(IDC_SERVER == LOWORD(wParam)) { // // set connection name to server name if conn name is blank // TCHAR szDesc[CL_MAX_DESC_LENGTH]; TCHAR szServer[CL_MAX_DESC_LENGTH]; GetDlgItemText(hDlg, IDC_DESCRIPTION, szDesc, CL_MAX_DESC_LENGTH); if(!lstrcmp(szDesc, L"")) { GetDlgItemText(hDlg, IDC_SERVER, szServer, CL_MAX_DOMAIN_LENGTH); SetDlgItemText(hDlg, IDC_DESCRIPTION, szServer); } } } else if (EN_CHANGE == HIWORD(wParam)) { if ((LOWORD(wParam) == IDC_USERNAME)) { //Handle UPN style user names //by disabling the domain field if there //is an @ in the username TCHAR szUserName[CL_MAX_USERNAME_LENGTH]; BOOL fDisableDomain = FALSE; GetDlgItemText( hDlg, IDC_USERNAME, szUserName, SIZEOF_TCHARBUFFER(szUserName)); if(!_tcsstr(szUserName, TEXT("@"))) { fDisableDomain = TRUE; } EnableWindow(GetDlgItem(hDlg, IDC_DOMAIN), fDisableDomain); } } break; // WM_COMMAND } } return FALSE; } BOOL CNewConDlg::GetPasswordSpecified() { BOOL fPasswordSpecified = FALSE; if (_tcslen(m_szPassword) != 0) { fPasswordSpecified = TRUE; } return fPasswordSpecified; }