313 lines
7.2 KiB
C++
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);
|
|
}
|
|
|
|
}
|