windows-nt/Source/XPSP1/NT/admin/wizards/addusrw/nwlim.cpp
2020-09-26 16:20:57 +08:00

313 lines
7.2 KiB
C++

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
NWLim.cpp : implementation file
CPropertyPage support for User mgmt wizard
File History:
JonY Apr-96 created
--*/
#include "stdafx.h"
#include "speckle.h"
#include "NWLim.h"
#include "NWWKS.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
class WKSMember
{
public:
CString csWKSAddress;
CString csWKSNode;
};
/////////////////////////////////////////////////////////////////////////////
// CNWLimitLogon dialog
IMPLEMENT_DYNCREATE(CNWLimitLogon, CPropertyPage)
CNWLimitLogon::CNWLimitLogon() : CPropertyPage(CNWLimitLogon::IDD)
{
//{{AFX_DATA_INIT(CNWLimitLogon)
m_nWorkstationRadio = 0;
m_csCaption = _T("");
//}}AFX_DATA_INIT
}
void CNWLimitLogon::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNWLimitLogon)
DDX_Control(pDX, IDC_NWLOGON_LIST, m_lbWksList);
DDX_Radio(pDX, IDC_WORKSTATION_RADIO, m_nWorkstationRadio);
DDX_Text(pDX, IDC_STATIC1, m_csCaption);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNWLimitLogon, CPropertyPage)
//{{AFX_MSG_MAP(CNWLimitLogon)
ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton)
ON_BN_CLICKED(IDC_REMOVE_BUTTON, OnRemoveButton)
ON_BN_CLICKED(IDC_WORKSTATION_RADIO, OnWorkstationRadio)
ON_BN_CLICKED(IDC_WORKSTATION_RADIO2, OnWorkstationRadio2)
ON_WM_SHOWWINDOW()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNWLimitLogon message handlers
LRESULT CNWLimitLogon::OnWizardNext()
{
UpdateData(TRUE);
if ((m_nWorkstationRadio == 1) && (m_lbWksList.GetCount() == 0))
{
AfxMessageBox(IDS_NEEDA_WORKSTATION);
return -1;
}
CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
USHORT sCount = 0;
BOOL bMatch = FALSE;
pApp->m_csAllowedLoginFrom = L"";
while (sCount < m_lbWksList.GetCount())
{
WKSMember* pMem = (WKSMember*)m_lbWksList.GetItemData(sCount);
CString csTemp;
if (pMem->csWKSNode == L"0000000000-1") csTemp.Format(L"%s%s", pMem->csWKSAddress, L"ffffffffffff");
else csTemp.Format(L"%s%s", pMem->csWKSAddress, pMem->csWKSNode);
pApp->m_csAllowedLoginFrom += csTemp;
sCount++;
}
if (m_lbWksList.GetCount() > 0) pApp->m_csAllowedLoginFrom += L"00";
return IDD_FINISH;
}
LRESULT CNWLimitLogon::OnWizardBack()
{
CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
if (pApp->m_bWorkstation) return IDD_LOGONTO_DLG;
else if (pApp->m_bHours) return IDD_HOURS_DLG;
else if (pApp->m_bExpiration) return IDD_ACCOUNT_EXP_DIALOG;
else return IDD_RESTRICTIONS_DIALOG;
}
void CNWLimitLogon::OnAddButton()
{
CAddNWWKS add;
if (add.DoModal() == 1)
{
// check for uniqueness
USHORT sCount = 0;
BOOL bMatch = FALSE;
while (sCount < m_lbWksList.GetCount())
{
WKSMember* pMem = (WKSMember*)m_lbWksList.GetItemData(sCount);
if ((pMem->csWKSAddress == add.m_csNetworkAddress) &&
(pMem->csWKSNode == add.m_csNodeAddress))
{
bMatch = TRUE;
break;
}
sCount++;
}
if (bMatch) return;
WKSMember* member = new WKSMember;
member->csWKSAddress = add.m_csNetworkAddress;
member->csWKSNode = add.m_csNodeAddress;
int nEntry = m_lbWksList.AddString(L" ");
m_lbWksList.SetItemData(nEntry, (DWORD)member);
// enable the remove button since there is something to remove
GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE);
GetDlgItem(IDC_NWLOGON_LIST)->SetFocus();
m_lbWksList.SetCurSel(0);
}
}
void CNWLimitLogon::OnRemoveButton()
{
USHORT sSel = m_lbWksList.GetCurSel();
WKSMember* member = (WKSMember*)m_lbWksList.GetItemData(sSel);
free(member);
m_lbWksList.DeleteString(sSel);
if (m_lbWksList.GetCount() == 0) GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
else if (sSel > 0) m_lbWksList.SetCurSel(sSel - 1);
else m_lbWksList.SetCurSel(0);
}
void CNWLimitLogon::OnWorkstationRadio()
{
GetDlgItem(IDC_NWSTATIC1)->EnableWindow(FALSE);
GetDlgItem(IDC_NWSTATIC2)->EnableWindow(FALSE);
GetDlgItem(IDC_NWLOGON_LIST)->EnableWindow(FALSE);
GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(FALSE);
GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
}
void CNWLimitLogon::OnWorkstationRadio2()
{
GetDlgItem(IDC_NWSTATIC1)->EnableWindow(TRUE);
GetDlgItem(IDC_NWSTATIC2)->EnableWindow(TRUE);
GetDlgItem(IDC_NWLOGON_LIST)->EnableWindow(TRUE);
GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(TRUE);
}
/////////////////////////////////////////////////////////////////////////////
// CWorkstationList
CWorkstationList::CWorkstationList()
{
}
CWorkstationList::~CWorkstationList()
{
}
BEGIN_MESSAGE_MAP(CWorkstationList, CListBox)
//{{AFX_MSG_MAP(CWorkstationList)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWorkstationList message handlers
void CWorkstationList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
COLORREF crefOldText;
COLORREF crefOldBk;
HBRUSH hBrush;
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
switch (lpDrawItemStruct->itemAction)
{
case ODA_SELECT:
case ODA_DRAWENTIRE:
// Is the item selected?
if (lpDrawItemStruct->itemState & ODS_SELECTED)
{
hBrush = CreateSolidBrush( GetSysColor(COLOR_HIGHLIGHT));
crefOldText = pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT) );
crefOldBk = pDC->SetBkColor(GetSysColor(COLOR_HIGHLIGHT) );
}
else
{
hBrush = (HBRUSH)GetStockObject( GetSysColor(COLOR_WINDOW));
crefOldText = pDC->SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
crefOldBk = pDC->SetBkColor(GetSysColor(COLOR_WINDOW));
}
// fill in the background
pDC->FillRect(&(lpDrawItemStruct->rcItem), CBrush::FromHandle(hBrush));
// display text
TCHAR* pName = (TCHAR*)malloc(255 * sizeof(TCHAR));
if (pName == NULL)
{
AfxMessageBox(IDS_GENERIC_NO_HEAP, MB_ICONEXCLAMATION);
exit(1);
}
DWORD dwAddr = GetItemData(lpDrawItemStruct->itemID);
WKSMember* member = (WKSMember*)dwAddr;
// format the name + comment
int nTop = (lpDrawItemStruct->rcItem.bottom + lpDrawItemStruct->rcItem.top) / 2;
pDC->TextOut(0,
(nTop - 8),
member->csWKSAddress);
if (member->csWKSNode == L"0000000000-1")
pDC->TextOut(130,
(nTop - 8),
L"All Nodes");
else
pDC->TextOut(130,
(nTop - 8),
member->csWKSNode);
free(pName);
break;
}
pDC->SetBkColor(crefOldBk );
pDC->SetTextColor(crefOldText );
}
int CWorkstationList::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
// TODO: Add your code to determine the sorting order of the specified items
// return -1 = item 1 sorts before item 2
// return 0 = item 1 and item 2 sort the same
// return 1 = item 1 sorts after item 2
return 0;
}
void CWorkstationList::OnDestroy()
{
while(GetCount() > 0)
{
WKSMember* member = (WKSMember*)GetItemData(0);
delete member;
DeleteString(0);
}
CListBox::OnDestroy();
}
void CNWLimitLogon::OnShowWindow(BOOL bShow, UINT nStatus)
{
CPropertyPage::OnShowWindow(bShow, nStatus);
if (bShow)
{
CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
CString csTemp;
csTemp.LoadString(IDS_NWLOGON_CAPTION);
CString csTemp2;
csTemp2.Format(csTemp, pApp->m_csUserName);
m_csCaption = csTemp2;
UpdateData(FALSE);
}
}