2020-09-30 17:12:32 +02:00

236 lines
6.7 KiB
C++

/****
unpage.cpp
User Manager username wizard and prop page implementations
History:
09/23/98: dsheldon created
****/
#include "stdafx.h"
#include "resource.h"
#include "unpage.h"
#include "misc.h"
/******
CUsernamePageBase Implementation
******/
BOOL CUsernamePageBase::OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
TraceEnter(TRACE_USR_CORE, "CUsernamePageBase::OnInitDialog");
// Limit the text of the username, fullname and description fields
HWND hwndUsername = GetDlgItem(hwnd, IDC_USER);
SendMessage(hwndUsername, EM_SETLIMITTEXT,
ARRAYSIZE(m_pUserInfo->m_szUsername) - 1, 0);
SetWindowText(hwndUsername, m_pUserInfo->m_szUsername);
HWND hwndFullName = GetDlgItem(hwnd, IDC_FULLNAME);
SendMessage(hwndFullName, EM_SETLIMITTEXT,
ARRAYSIZE(m_pUserInfo->m_szFullName) - 1, 0);
SetWindowText(hwndFullName, m_pUserInfo->m_szFullName);
HWND hwndDescription = GetDlgItem(hwnd, IDC_DESCRIPTION);
SendMessage(hwndDescription, EM_SETLIMITTEXT,
ARRAYSIZE(m_pUserInfo->m_szComment) - 1, 0);
SetWindowText(hwndDescription, m_pUserInfo->m_szComment);
TraceLeaveValue(TRUE);
}
/******
CUsernameWizardPage Implementation
******/
INT_PTR CUsernameWizardPage::DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
HANDLE_MSG(hwndDlg, WM_INITDIALOG, OnInitDialog);
HANDLE_MSG(hwndDlg, WM_NOTIFY, OnNotify);
HANDLE_MSG(hwndDlg, WM_COMMAND, OnCommand);
}
return FALSE;
}
BOOL CUsernameWizardPage::OnNotify(HWND hwnd, int idCtrl, LPNMHDR pnmh)
{
TraceEnter(TRACE_USR_CORE, "CUsernameWizardPage::OnNotify");
switch (pnmh->code)
{
case PSN_SETACTIVE:
SetWizardButtons(hwnd, GetParent(hwnd));
SetWindowLongPtr(hwnd, DWLP_MSGRESULT, 0);
TraceLeaveValue(TRUE);
case PSN_WIZNEXT:
// Save the data the user has entered
FetchText(hwnd, IDC_USER, m_pUserInfo->m_szUsername,
ARRAYSIZE(m_pUserInfo->m_szUsername));
FetchText(hwnd, IDC_FULLNAME, m_pUserInfo->m_szFullName,
ARRAYSIZE(m_pUserInfo->m_szFullName));
FetchText(hwnd, IDC_DESCRIPTION, m_pUserInfo->m_szComment,
ARRAYSIZE(m_pUserInfo->m_szComment));
if (S_OK != ValidateName(m_pUserInfo->m_szUsername))
{
// Username is invalid. warn now
::DisplayFormatMessage(hwnd, IDS_USR_APPLET_CAPTION, IDS_BADUSERNAME, MB_ICONERROR | MB_OK);
SetWindowLongPtr(hwnd, DWLP_MSGRESULT, -1);
}
else if (::UserAlreadyHasPermission(m_pUserInfo, hwnd))
{
// Don't let the user continue if the user they've selected already
// has permission to use this machine
SetWindowLongPtr(hwnd, DWLP_MSGRESULT, -1);
}
else
{
// We have a username (otherwise next would be disabled)
SetWindowLongPtr(hwnd, DWLP_MSGRESULT, 0);
}
TraceLeaveValue(TRUE);
}
TraceLeaveValue(FALSE);
}
BOOL CUsernameWizardPage::OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
TraceEnter(TRACE_USR_CORE, "CUsernameWizardPage::OnCommand");
switch (codeNotify)
{
case EN_CHANGE:
SetWizardButtons(hwnd, GetParent(hwnd));
TraceLeaveValue(TRUE);
}
TraceLeaveValue(FALSE);
}
void CUsernameWizardPage::SetWizardButtons(HWND hwnd, HWND hwndPropSheet)
{
TraceEnter(TRACE_USR_CORE, "CUsernameWizardPage::SetWizardButtons");
HWND hwndEdit = GetDlgItem(hwnd, IDC_USER);
DWORD dwUNLength = GetWindowTextLength(hwndEdit);
PropSheet_SetWizButtons(hwndPropSheet, (dwUNLength == 0) ? 0 : PSWIZB_NEXT);
TraceLeaveVoid();
}
/******
CUsernamePropertyPage Implementation
******/
INT_PTR CUsernamePropertyPage::DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
HANDLE_MSG(hwndDlg, WM_INITDIALOG, OnInitDialog);
HANDLE_MSG(hwndDlg, WM_NOTIFY, OnNotify);
HANDLE_MSG(hwndDlg, WM_COMMAND, OnCommand);
}
return FALSE;
}
BOOL CUsernamePropertyPage::OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
TraceEnter(TRACE_USR_CORE, "CUsernamePropertyPage::OnCommand");
switch (codeNotify)
{
case EN_CHANGE:
PropSheet_Changed(GetParent(hwnd), hwnd);
TraceLeaveValue(TRUE);
}
TraceLeaveValue(FALSE);
}
BOOL CUsernamePropertyPage::OnNotify(HWND hwnd, int idCtrl, LPNMHDR pnmh)
{
TraceEnter(TRACE_USR_CORE, "CUsernamePropertyPage::OnNotify");
BOOL fReturn = FALSE;
switch (pnmh->code)
{
case PSN_APPLY:
{
TCHAR szTemp[256];
HRESULT hr;
LONG lResult = PSNRET_NOERROR;
// Try to update the username
FetchText(hwnd, IDC_USER, szTemp,
ARRAYSIZE(szTemp));
TCHAR szDomainUser[MAX_DOMAIN + MAX_USER + 2];
::MakeDomainUserString(m_pUserInfo->m_szDomain, m_pUserInfo->m_szUsername,
szDomainUser, ARRAYSIZE(szDomainUser));
if (StrCmp(szTemp, m_pUserInfo->m_szUsername) != 0)
{
hr = m_pUserInfo->UpdateUsername(szTemp);
if (FAILED(hr))
{
::DisplayFormatMessage(hwnd, IDS_USR_APPLET_CAPTION,
IDS_USR_UPDATE_USERNAME_ERROR, MB_ICONERROR | MB_OK, szDomainUser);
lResult = PSNRET_INVALID_NOCHANGEPAGE;
}
}
// Try to update the full name
FetchText(hwnd, IDC_FULLNAME, szTemp,
ARRAYSIZE(szTemp));
if (StrCmp(szTemp, m_pUserInfo->m_szFullName) != 0)
{
hr = m_pUserInfo->UpdateFullName(szTemp);
if (FAILED(hr))
{
::DisplayFormatMessage(hwnd, IDS_USR_APPLET_CAPTION,
IDS_USR_UPDATE_FULLNAME_ERROR, MB_ICONERROR | MB_OK, szDomainUser);
lResult = PSNRET_INVALID_NOCHANGEPAGE;
}
}
// Try to update the description
FetchText(hwnd, IDC_DESCRIPTION, szTemp,
ARRAYSIZE(szTemp));
if (StrCmp(szTemp, m_pUserInfo->m_szComment) != 0)
{
hr = m_pUserInfo->UpdateDescription(szTemp);
if (FAILED(hr))
{
::DisplayFormatMessage(hwnd, IDS_USR_APPLET_CAPTION,
IDS_USR_UPDATE_DESCRIPTION_ERROR, MB_ICONERROR | MB_OK, szDomainUser);
lResult = PSNRET_INVALID_NOCHANGEPAGE;
}
}
SetWindowLongPtr(hwnd, DWLP_MSGRESULT, lResult);
}
fReturn = TRUE;
break;
default:
break;
}
TraceLeaveValue(fReturn);
}