// File: passdlg.cpp #include "precomp.h" #include "resource.h" #include "PassDlg.h" #include "help_ids.h" #define USERSIZE 20 #define DOMAINSIZE 15 #define PASSWDSIZE 256 static const DWORD aHelpIdsPassword[] = { IDC_EDIT_PASSWORD, IDH_ADV_PASSWORD, 0, 0 // terminator }; /**************************************************************************** * * CLASS: CPasswordDlg * * MEMBER: CPasswordDlg() * * PURPOSE: Constructor - initializes variables * ****************************************************************************/ CPasswordDlg::CPasswordDlg(HWND hwndParent, LPCTSTR pcszConfName, LPCTSTR pCertText, BOOL fIsService): m_hwndParent(hwndParent), m_strConfName((LPCTSTR) pcszConfName), m_hwnd(NULL), m_fRemoteIsRDS(fIsService), m_strCert(pCertText) { DebugEntry(CPasswordDlg::CPasswordDlg); DebugExitVOID(CPasswordDlg::CPasswordDlg); } /**************************************************************************** * * CLASS: CPasswordDlg * * MEMBER: DoModal() * * PURPOSE: Brings up the modal dialog box * ****************************************************************************/ INT_PTR CPasswordDlg::DoModal() { DebugEntry(CPasswordDlg::DoModal); INT_PTR nRet = DialogBoxParam( ::GetInstanceHandle(), m_fRemoteIsRDS ? MAKEINTRESOURCE(IDD_PASSWORD_RDS): MAKEINTRESOURCE(IDD_PASSWORD), m_hwndParent, CPasswordDlg::PasswordDlgProc, (LPARAM) this); DebugExitINT_PTR(CPasswordDlg::DoModal, nRet); return nRet; } /**************************************************************************** * * CLASS: CPasswordDlg * * MEMBER: PasswordDlgProc() * * PURPOSE: Dialog Proc - handles all messages * ****************************************************************************/ INT_PTR CALLBACK CPasswordDlg::PasswordDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { BOOL bMsgHandled = FALSE; // uMsg may be any value. // wparam may be any value. // lparam may be any value. ASSERT(IS_VALID_HANDLE(hDlg, WND)); switch (uMsg) { case WM_INITDIALOG: { if (NULL != lParam) { ((CPasswordDlg*) lParam)->m_hwnd = hDlg; SetWindowLongPtr(hDlg, DWLP_USER, lParam); // Set the conference name if (((CPasswordDlg*) lParam)->m_fRemoteIsRDS) { ::SetDlgItemText( hDlg, IDC_EDIT_RDS_CERT, ((CPasswordDlg*) lParam)->m_strCert); ::SendDlgItemMessage( hDlg, IDC_EDIT_USERNAME, EM_LIMITTEXT, (WPARAM) USERSIZE, 0); ::SendDlgItemMessage( hDlg, IDC_EDIT_PASSWORD, EM_LIMITTEXT, (WPARAM) PASSWDSIZE, 0); ::SendDlgItemMessage( hDlg, IDC_EDIT_DOMAIN, EM_LIMITTEXT, (WPARAM) DOMAINSIZE, 0); ::SetDlgItemText( hDlg, IDC_EDIT_USERNAME, *(m_pstrUser)); ::SetDlgItemText( hDlg, IDC_EDIT_DOMAIN, *(m_pstrDomain)); } else { ::SetDlgItemText( hDlg, IDC_STATIC_CONFNAME, ((CPasswordDlg*) lParam)->m_strConfName); } // Bring it to the foreground ::SetForegroundWindow(hDlg); } bMsgHandled = TRUE; break; } default: { CPasswordDlg* ppd = (CPasswordDlg*) GetWindowLongPtr( hDlg, DWLP_USER); if (NULL != ppd) { bMsgHandled = ppd->ProcessMessage(uMsg, wParam, lParam); } } } return bMsgHandled; } /**************************************************************************** * * CLASS: CPasswordDlg * * MEMBER: ProcessMessage() * * PURPOSE: processes all messages except WM_INITDIALOG * ****************************************************************************/ BOOL CPasswordDlg::ProcessMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { BOOL bRet = FALSE; ASSERT(m_hwnd); switch (uMsg) { case WM_COMMAND: { switch (LOWORD(wParam)) { case IDOK: { bRet = OnOk(); break; } case IDCANCEL: { EndDialog(m_hwnd, LOWORD(wParam)); bRet = TRUE; break; } case IDC_EDIT_PASSWORD: { if (!m_fRemoteIsRDS && EN_CHANGE == HIWORD(wParam)) { BOOL fEnable = 0 != ::GetWindowTextLength( GetDlgItem(m_hwnd, IDC_EDIT_PASSWORD)); ::EnableWindow(GetDlgItem(m_hwnd, IDOK), fEnable); } break; } case IDC_EDIT_USERNAME: { if (EN_CHANGE == HIWORD(wParam)) { BOOL fEnable = 0 != ::GetWindowTextLength( GetDlgItem(m_hwnd, IDC_EDIT_USERNAME)); ::EnableWindow(GetDlgItem(m_hwnd, IDOK), fEnable); } break; } } break; } case WM_CONTEXTMENU: DoHelpWhatsThis(wParam, aHelpIdsPassword); break; case WM_HELP: DoHelp(lParam, aHelpIdsPassword); break; default: break; } return bRet; } BOOL CPasswordDlg::OnOk() { // BUGBUG: how long can a password be? - Remember to limit the edit control text TCHAR szBuf[256]; TCHAR szUser[USERSIZE+1]; TCHAR szDomain[DOMAINSIZE+1]; if (m_fRemoteIsRDS) { if ( 0!= GetDlgItemText(m_hwnd, IDC_EDIT_USERNAME, szUser, CCHMAX(szUser))) { ASSERT(strlen(szUser)); m_strPassword = szUser; // add user name m_strPassword += ":"; if ( 0 != GetDlgItemText(m_hwnd, IDC_EDIT_DOMAIN, szDomain, CCHMAX(szDomain))) { m_strPassword += szDomain; } else { m_strPassword += "."; } m_strPassword += ":"; } else { ERROR_OUT(("CPasswordDlg::OnOk - unable to get username")); } *(CPasswordDlg::m_pstrUser) = szUser; *(CPasswordDlg::m_pstrDomain) = szDomain; } if (0 != GetDlgItemText(m_hwnd, IDC_EDIT_PASSWORD, szBuf, CCHMAX(szBuf))) { m_strPassword += szBuf; // add password } EndDialog(m_hwnd, IDOK); return TRUE; } BOOL CPasswordDlg::Init() { if (0 == m_pstrDomain) { m_pstrDomain = new CSTRING; m_pstrUser = new CSTRING; if (NULL == m_pstrUser || NULL == m_pstrDomain) { ERROR_OUT(("CPassword::Init() -- failed to allocate memory")); return FALSE; } } return TRUE; } VOID CPasswordDlg::Cleanup() { if (m_pstrDomain) delete m_pstrDomain; if (m_pstrUser) delete m_pstrUser; } CSTRING *CPasswordDlg::m_pstrDomain = NULL; CSTRING *CPasswordDlg::m_pstrUser = NULL;