|
|
//-----------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: D L G A T M . C P P
//
// Contents: CTcpArpcPage and CATMAddressDialog implementation
//
// Notes: The "ARP Client" page and dialog
//
// Author: tongl 1 July 1997 Created
//
//-----------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include "tcpipobj.h"
#include "ncatlui.h"
#include "ncstl.h"
#include "tcpconst.h"
#include "tcpmacro.h"
#include "tcputil.h"
#include "tcphelp.h"
#include "atmcommon.h"
#include "dlgatm.h"
#include "dlgaddr.h"
/////////////////////////////////////////////////////////////////
//
// CAtmArpcPage
//
/////////////////////////////////////////////////////////////////
// Message map functions
LRESULT CAtmArpcPage::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled) { m_hMTUEditBox = GetDlgItem(IDC_EDT_ATM_MaxTU); Assert(m_hMTUEditBox);
// ARP Server
m_hArps.m_hList = GetDlgItem(IDC_LBX_ATM_ArpsAddrs); m_hArps.m_hAdd = GetDlgItem(IDC_PSB_ATM_ArpsAdd); m_hArps.m_hEdit = GetDlgItem(IDC_PSB_ATM_ArpsEdt); m_hArps.m_hRemove = GetDlgItem(IDC_PSB_ATM_ArpsRmv); m_hArps.m_hUp = GetDlgItem(IDC_PSB_ATM_ArpsUp); m_hArps.m_hDown = GetDlgItem(IDC_PSB_ATM_ArpsDown);
// MAR Server
m_hMars.m_hList = GetDlgItem(IDC_LBX_ATM_MarsAddrs); m_hMars.m_hAdd = GetDlgItem(IDC_PSB_ATM_MarsAdd); m_hMars.m_hEdit = GetDlgItem(IDC_PSB_ATM_MarsEdt); m_hMars.m_hRemove = GetDlgItem(IDC_PSB_ATM_MarsRmv); m_hMars.m_hUp = GetDlgItem(IDC_PSB_ATM_MarsUp); m_hMars.m_hDown = GetDlgItem(IDC_PSB_ATM_MarsDown);
// Set the up\down arrow icons
SendDlgItemMessage(IDC_PSB_ATM_ArpsUp, BM_SETIMAGE, IMAGE_ICON, reinterpret_cast<LPARAM>(g_hiconUpArrow)); SendDlgItemMessage(IDC_PSB_ATM_ArpsDown, BM_SETIMAGE, IMAGE_ICON, reinterpret_cast<LPARAM>(g_hiconDownArrow));
SendDlgItemMessage(IDC_PSB_ATM_MarsUp, BM_SETIMAGE, IMAGE_ICON, reinterpret_cast<LPARAM>(g_hiconUpArrow)); SendDlgItemMessage(IDC_PSB_ATM_MarsDown, BM_SETIMAGE, IMAGE_ICON, reinterpret_cast<LPARAM>(g_hiconDownArrow));
// Set MTU edit box length
::SendMessage(m_hMTUEditBox, EM_SETLIMITTEXT, MAX_MTU_LENGTH, 0);
return 0; }
LRESULT CAtmArpcPage::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled) { ShowContextHelp(m_hWnd, HELP_CONTEXTMENU, m_adwHelpIDs); return 0; }
LRESULT CAtmArpcPage::OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled) { LPHELPINFO lphi = reinterpret_cast<LPHELPINFO>(lParam); Assert(lphi);
if (HELPINFO_WINDOW == lphi->iContextType) { ShowContextHelp(static_cast<HWND>(lphi->hItemHandle), HELP_WM_HELP, m_adwHelpIDs); }
return 0; }
// Notify handlers for the property page
LRESULT CAtmArpcPage::OnActive(int idCtrl, LPNMHDR pnmh, BOOL& fHandled) { SetInfo();
::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, 0); return 0; }
LRESULT CAtmArpcPage::OnKillActive(int idCtrl, LPNMHDR pnmh, BOOL& fHandled) { // All error values are loaded and then checked here
// while all non-error values are checked in OnApply
BOOL err = FALSE; // Allow page to lose active status
// In non-PVC only mode, if either of the list boxes (ARPS or MARS)
// is empty for any bound atm card, we can't leave the page.
if (BST_UNCHECKED == IsDlgButtonChecked(IDC_CHK_ATM_PVCONLY)) { int nArps = Tcp_ListBox_GetCount(m_hArps.m_hList); int nMars = Tcp_ListBox_GetCount(m_hMars.m_hList);
if ((nArps==0) || (nMars ==0)) { NcMsgBox(m_hWnd, IDS_MSFT_TCP_TEXT, IDS_INVALID_ATMSERVERLIST, MB_APPLMODAL | MB_ICONEXCLAMATION | MB_OK);
err = TRUE; } }
// MTU value
WCHAR szData[MAX_MTU_LENGTH+1]; szData[0]= 0; ::GetWindowText(GetDlgItem(IDC_EDT_ATM_MaxTU), szData, MAX_MTU_LENGTH+1);
// check the range of the number
PWSTR pStr; unsigned long num = wcstoul(szData, &pStr, 10);
int nId = IDS_MTU_RANGE_WORD;
if (num < MIN_MTU || num > MAX_MTU) { NcMsgBox(::GetActiveWindow(), IDS_MSFT_TCP_TEXT, nId, MB_APPLMODAL | MB_ICONEXCLAMATION | MB_OK); ::SetFocus(m_hMTUEditBox);
err = TRUE; }
if (!err) { UpdateInfo(); }
::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, err); return err; }
LRESULT CAtmArpcPage::OnApply(int idCtrl, LPNMHDR pnmh, BOOL& fHandled) { BOOL nResult = PSNRET_NOERROR;
if (!IsModified()) { ::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, nResult); return nResult; }
UpdateInfo();
// pass the info back to its parent dialog
m_pParentDlg->m_fPropShtOk = TRUE;
if(!m_pParentDlg->m_fPropShtModified) m_pParentDlg->m_fPropShtModified = IsModified();
// reset status
SetModifiedTo(FALSE); // this page is no longer modified
::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, nResult); return nResult; }
LRESULT CAtmArpcPage::OnCancel(int idCtrl, LPNMHDR pnmh, BOOL& fHandled) { return 0; }
LRESULT CAtmArpcPage::OnQueryCancel(int idCtrl, LPNMHDR pnmh, BOOL& fHandled) { return 0; }
// Control message handlers
// PVC Only
LRESULT CAtmArpcPage::OnPVCOnly(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { BOOL fChecked = (BST_CHECKED == IsDlgButtonChecked(IDC_CHK_ATM_PVCONLY)); if (fChecked != m_pAdapterInfo->m_fPVCOnly) { PageModified(); }
EnableGroup(!fChecked);
return 0; }
// ARP server controls
LRESULT CAtmArpcPage::OnArpServer(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { switch (wNotifyCode) { case LBN_SELCHANGE: SetButtons(m_hArps, NUM_ATMSERVER_LIMIT); break;
default: break; }
return 0; }
LRESULT CAtmArpcPage::OnAddArps(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { m_hAddressList = m_hArps.m_hList; OnServerAdd(m_hArps, c_szArpServer); return 0; }
LRESULT CAtmArpcPage::OnEditArps(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { m_hAddressList = m_hArps.m_hList; OnServerEdit(m_hArps, c_szArpServer); return 0; }
LRESULT CAtmArpcPage::OnRemoveArps(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { BOOL fRemoveArps = TRUE; OnServerRemove(m_hArps, fRemoveArps); return 0; }
LRESULT CAtmArpcPage::OnArpsUp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { OnServerUp(m_hArps); return 0; }
LRESULT CAtmArpcPage::OnArpsDown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { OnServerDown(m_hArps); return 0; }
// MAR server controls
LRESULT CAtmArpcPage::OnMarServer(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { switch (wNotifyCode) { case LBN_SELCHANGE: SetButtons(m_hMars, NUM_ATMSERVER_LIMIT); break;
default: break; }
return 0; }
LRESULT CAtmArpcPage::OnAddMars(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { m_hAddressList = m_hMars.m_hList; OnServerAdd(m_hMars, c_szMarServer); return 0; }
LRESULT CAtmArpcPage::OnEditMars(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { m_hAddressList = m_hMars.m_hList; OnServerEdit(m_hMars, c_szMarServer); return 0; }
LRESULT CAtmArpcPage::OnRemoveMars(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { BOOL fRemoveArps = FALSE; OnServerRemove(m_hMars, fRemoveArps); return 0; }
LRESULT CAtmArpcPage::OnMarsUp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { OnServerUp(m_hMars); return 0; }
LRESULT CAtmArpcPage::OnMarsDown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { OnServerDown(m_hMars); return 0; }
LRESULT CAtmArpcPage::OnMaxTU(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { switch(wNotifyCode) { case EN_CHANGE: PageModified(); break; } return 0; } //
// Helper functions
//
// Update the server addresses and MTU of the deselected card
void CAtmArpcPage::UpdateInfo() { // PVC Only
m_pAdapterInfo->m_fPVCOnly = (BST_CHECKED == IsDlgButtonChecked(IDC_CHK_ATM_PVCONLY));
// Update ARP server address
FreeCollectionAndItem(m_pAdapterInfo->m_vstrARPServerList); int nCount = Tcp_ListBox_GetCount(m_hArps.m_hList);
WCHAR szARPS[MAX_ATM_ADDRESS_LENGTH+1]; for (int i=0; i< nCount; i++) { Tcp_ListBox_GetText(m_hArps.m_hList, i, szARPS); m_pAdapterInfo->m_vstrARPServerList.push_back(new tstring(szARPS)); }
// Update MAR server address
FreeCollectionAndItem(m_pAdapterInfo->m_vstrMARServerList); nCount = Tcp_ListBox_GetCount(m_hMars.m_hList);
WCHAR szMARS[MAX_ATM_ADDRESS_LENGTH+1]; for (i=0; i< nCount; i++) { Tcp_ListBox_GetText(m_hMars.m_hList, i, szMARS); m_pAdapterInfo->m_vstrMARServerList.push_back(new tstring(szMARS)); }
// MTU
WCHAR szMTU[MAX_MTU_LENGTH+1]; GetDlgItemText(IDC_EDT_ATM_MaxTU, szMTU, MAX_MTU_LENGTH+1); m_pAdapterInfo->m_dwMTU = _wtoi(szMTU); }
// Set the other controls according to the current adapter
void CAtmArpcPage::SetInfo() { Assert(m_pAdapterInfo);
if (m_pAdapterInfo != NULL) { Assert (m_pAdapterInfo->m_fIsAtmAdapter);
if (m_pAdapterInfo->m_fIsAtmAdapter) { // ARP server IDC_LBX_ATM_ArpsAddrs
int nResult;
Tcp_ListBox_ResetContent(m_hArps.m_hList);
for(VSTR_ITER iterARPServer = m_pAdapterInfo->m_vstrARPServerList.begin(); iterARPServer != m_pAdapterInfo->m_vstrARPServerList.end() ; ++iterARPServer) { nResult = Tcp_ListBox_InsertString(m_hArps.m_hList, -1, (*iterARPServer)->c_str()); }
// set slection to first item
if (nResult >= 0) Tcp_ListBox_SetCurSel(m_hArps.m_hList, 0);
// MAR server IDC_LBX_ATM_MarsAddrs
Tcp_ListBox_ResetContent(m_hMars.m_hList);
for(VSTR_ITER iterMARServer = m_pAdapterInfo->m_vstrMARServerList.begin(); iterMARServer != m_pAdapterInfo->m_vstrMARServerList.end() ; ++iterMARServer) { nResult = Tcp_ListBox_InsertString(m_hMars.m_hList, -1, (*iterMARServer)->c_str()); }
// set slection to first item
if (nResult >= 0) Tcp_ListBox_SetCurSel(m_hMars.m_hList, 0);
// MTU
WCHAR szBuf[MAX_MTU_LENGTH]; wsprintfW(szBuf, c_szItoa, m_pAdapterInfo->m_dwMTU); SetDlgItemText(IDC_EDT_ATM_MaxTU, szBuf);
// Set push buttons state
SetButtons(m_hArps, NUM_ATMSERVER_LIMIT); SetButtons(m_hMars, NUM_ATMSERVER_LIMIT);
// Set PVC Only check box
CheckDlgButton(IDC_CHK_ATM_PVCONLY, m_pAdapterInfo->m_fPVCOnly); if(m_pAdapterInfo->m_fPVCOnly) { EnableGroup(FALSE); } } } return; }
void CAtmArpcPage::EnableGroup(BOOL fEnable) { ::EnableWindow(GetDlgItem(IDC_LBX_ATM_ArpsAddrs), fEnable); ::EnableWindow(GetDlgItem(IDC_PSB_ATM_ArpsAdd), fEnable); ::EnableWindow(GetDlgItem(IDC_PSB_ATM_ArpsEdt), fEnable); ::EnableWindow(GetDlgItem(IDC_PSB_ATM_ArpsRmv), fEnable); ::EnableWindow(GetDlgItem(IDC_PSB_ATM_ArpsUp), fEnable); ::EnableWindow(GetDlgItem(IDC_PSB_ATM_ArpsDown), fEnable);
::EnableWindow(GetDlgItem(IDC_LBX_ATM_MarsAddrs), fEnable); ::EnableWindow(GetDlgItem(IDC_PSB_ATM_MarsAdd), fEnable); ::EnableWindow(GetDlgItem(IDC_PSB_ATM_MarsEdt), fEnable); ::EnableWindow(GetDlgItem(IDC_PSB_ATM_MarsRmv), fEnable); ::EnableWindow(GetDlgItem(IDC_PSB_ATM_MarsUp), fEnable); ::EnableWindow(GetDlgItem(IDC_PSB_ATM_MarsDown), fEnable);
if (fEnable) { // Set push buttons state
SetButtons(m_hArps, NUM_ATMSERVER_LIMIT); SetButtons(m_hMars, NUM_ATMSERVER_LIMIT); } }
void CAtmArpcPage::OnServerAdd(HANDLES hGroup, PCTSTR pszTitle) { m_fEditState = FALSE; CAtmAddressDialog * pDlgSrv = new CAtmAddressDialog(this, g_aHelpIDs_IDD_ATM_ADDR);
pDlgSrv->SetTitle(pszTitle);
if (pDlgSrv->DoModal() == IDOK) { tstring strNewAddress; if (!lstrcmpW(pszTitle, c_szArpServer)) { strNewAddress = m_strNewArpsAddress;
// empty strings, this removes the saved address
m_strNewArpsAddress = c_szEmpty; } else { Assert(!lstrcmpW(pszTitle, c_szMarServer)); strNewAddress = m_strNewMarsAddress;
// empty strings, this removes the saved address
m_strNewMarsAddress = c_szEmpty; } int idx = Tcp_ListBox_InsertString(hGroup.m_hList, -1, strNewAddress.c_str());
PageModified();
Assert(idx >= 0); if (idx >= 0) { Tcp_ListBox_SetCurSel(hGroup.m_hList, idx); SetButtons(hGroup, NUM_ATMSERVER_LIMIT); } }
// release dialog object
delete pDlgSrv; }
void CAtmArpcPage::OnServerEdit(HANDLES hGroup, PCWSTR pszTitle) { m_fEditState = TRUE; Assert(Tcp_ListBox_GetCount(hGroup.m_hList));
int idx = Tcp_ListBox_GetCurSel(hGroup.m_hList); Assert(idx >= 0);
// save off the removed address and delete it from the listview
if (idx >= 0) { WCHAR buf[MAX_ATM_ADDRESS_LENGTH+1];
Assert(Tcp_ListBox_GetTextLen(hGroup.m_hList, idx) <= celems(buf)); Tcp_ListBox_GetText(hGroup.m_hList, idx, buf);
BOOL fEditArps = !lstrcmpW(pszTitle, c_szArpServer);
// used by dialog to display what to edit
if (fEditArps) { m_strNewArpsAddress = buf; } else { m_strNewMarsAddress = buf; }
CAtmAddressDialog * pDlgSrv = new CAtmAddressDialog(this, g_aHelpIDs_IDD_ATM_ADDR);
pDlgSrv->SetTitle(pszTitle);
if (pDlgSrv->DoModal() == IDOK) { // replace the item in the listview with the new information
Tcp_ListBox_DeleteString(hGroup.m_hList, idx);
PageModified();
if (fEditArps) { m_strMovingEntry = m_strNewArpsAddress;
// restore the original removed address
m_strNewArpsAddress = buf; } else { m_strMovingEntry = m_strNewMarsAddress;
// restore the original removed address
m_strNewMarsAddress = buf; }
ListBoxInsertAfter(hGroup.m_hList, idx, m_strMovingEntry.c_str()); Tcp_ListBox_SetCurSel(hGroup.m_hList, idx); } else { // empty strings, this removes the saved address
if (fEditArps) { m_strNewArpsAddress = c_szEmpty; } else { m_strNewMarsAddress = c_szEmpty; } }
delete pDlgSrv; } }
void CAtmArpcPage::OnServerRemove(HANDLES hGroup, BOOL fRemoveArps) { int idx = Tcp_ListBox_GetCurSel(hGroup.m_hList); Assert(idx >=0);
if (idx >=0) { WCHAR buf[MAX_ATM_ADDRESS_LENGTH+1]; Assert(Tcp_ListBox_GetTextLen(hGroup.m_hList, idx) <= celems(buf));
Tcp_ListBox_GetText(hGroup.m_hList, idx, buf);
if (fRemoveArps) { m_strNewArpsAddress = buf; } else { m_strNewMarsAddress = buf; } Tcp_ListBox_DeleteString(hGroup.m_hList, idx);
PageModified();
// select a new item
int nCount; if ((nCount = Tcp_ListBox_GetCount(hGroup.m_hList)) != LB_ERR) { // select the previous item in the list
if (idx) --idx;
Tcp_ListBox_SetCurSel(hGroup.m_hList, idx); } SetButtons(hGroup, NUM_ATMSERVER_LIMIT); } }
void CAtmArpcPage::OnServerUp(HANDLES hGroup) { Assert(m_hArps.m_hList);
int nCount = Tcp_ListBox_GetCount(hGroup.m_hList); Assert(nCount);
int idx = Tcp_ListBox_GetCurSel(hGroup.m_hList); Assert(idx != 0);
if (ListBoxRemoveAt(hGroup.m_hList, idx, &m_strMovingEntry) == FALSE) { Assert(FALSE); return; }
--idx; PageModified(); ListBoxInsertAfter(hGroup.m_hList, idx, m_strMovingEntry.c_str());
Tcp_ListBox_SetCurSel(hGroup.m_hList, idx); SetButtons(hGroup, NUM_ATMSERVER_LIMIT); }
void CAtmArpcPage::OnServerDown(HANDLES hGroup) { Assert(hGroup.m_hList);
int nCount = Tcp_ListBox_GetCount(hGroup.m_hList); Assert(nCount);
int idx = Tcp_ListBox_GetCurSel(hGroup.m_hList); --nCount;
Assert(idx != nCount);
if (ListBoxRemoveAt(hGroup.m_hList, idx, &m_strMovingEntry) == FALSE) { Assert(FALSE); return; }
++idx; PageModified();
ListBoxInsertAfter(hGroup.m_hList, idx, m_strMovingEntry.c_str()); Tcp_ListBox_SetCurSel(hGroup.m_hList, idx); SetButtons(hGroup, NUM_ATMSERVER_LIMIT); }
/////////////////////////////////////////////////////////////////
//
// CAtmAddressDialog
//
/////////////////////////////////////////////////////////////////
CAtmAddressDialog::CAtmAddressDialog(CAtmArpcPage * pAtmArpcPage, const DWORD* adwHelpIDs) { m_pParentDlg = pAtmArpcPage; m_adwHelpIDs = adwHelpIDs; m_hOkButton = 0; };
CAtmAddressDialog::~CAtmAddressDialog(){};
LRESULT CAtmAddressDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled) { // set title
SetDlgItemText(IDCST_ATM_AddrName, m_szTitle);
BOOL fEditArps = !lstrcmpW(m_szTitle, c_szArpServer);
// change the "Ok" button to "Add" if we are not editing
if (FALSE == m_pParentDlg->m_fEditState) SetDlgItemText(IDOK, L"Add");
// Set the position of the pop up dialog to be right over the listbox
// on parent dialog
RECT rect;
Assert(m_pParentDlg->m_hAddressList); ::GetWindowRect(m_pParentDlg->m_hAddressList, &rect); SetWindowPos(NULL, rect.left, rect.top, 0,0, SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE);
// Save handles to the "Ok" button and the edit box
m_hOkButton = GetDlgItem(IDOK); m_hEditBox = GetDlgItem(IDC_EDT_ATM_Address);
// ATM addresses have a 40 character limit + separaters
::SendMessage(m_hEditBox, EM_SETLIMITTEXT, MAX_ATM_ADDRESS_LENGTH*1.5, 0);
// add the address that was just removed
tstring strNewAddress = fEditArps ? m_pParentDlg->m_strNewArpsAddress : m_pParentDlg->m_strNewMarsAddress; if (strNewAddress.size()) { ::SetWindowText(m_hEditBox, strNewAddress.c_str()); ::SendMessage(m_hEditBox, EM_SETSEL, 0, -1); ::EnableWindow(m_hOkButton, TRUE); } else { if (fEditArps) { m_pParentDlg->m_strNewArpsAddress = c_szEmpty; } else { m_pParentDlg->m_strNewMarsAddress = c_szEmpty; } ::EnableWindow(m_hOkButton, FALSE); }
::SetFocus(m_hEditBox); return 0; }
LRESULT CAtmAddressDialog::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled) { ShowContextHelp(m_hWnd, HELP_CONTEXTMENU, m_adwHelpIDs); return 0; }
LRESULT CAtmAddressDialog::OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled) { LPHELPINFO lphi = reinterpret_cast<LPHELPINFO>(lParam); Assert(lphi);
if (HELPINFO_WINDOW == lphi->iContextType) { ShowContextHelp(static_cast<HWND>(lphi->hItemHandle), HELP_WM_HELP, m_adwHelpIDs); }
return 0; }
// If the "Ok button is pushed
LRESULT CAtmAddressDialog::OnOk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { WCHAR szAtmAddress[MAX_ATM_ADDRESS_LENGTH+1]; int i =0; int nId =0;
// Get the current address from the control and
// add them to the adapter if valid
::GetWindowText(m_hEditBox, szAtmAddress, MAX_ATM_ADDRESS_LENGTH+1);
if (! FIsValidAtmAddress(szAtmAddress, &i, &nId)) { // If invalid ATM address, we pop up a message box and set focus
// back to the edit box
// REVIEW(tongl): report first invalid character in mesg box
NcMsgBox(m_hWnd, IDS_MSFT_TCP_TEXT, IDS_INCORRECT_ATM_ADDRESS, MB_APPLMODAL | MB_ICONEXCLAMATION | MB_OK);
::SetFocus(GetDlgItem(IDC_EDT_ATM_Address));
return 0; }
// We check if the newly added or modified string is already in the list,
// if so, we do not add a duplicate address
// m_hCurrentAddressList is the handle to either ARPS list or MARS list
int nCount = Tcp_ListBox_GetCount(m_pParentDlg->m_hAddressList); if (nCount) // if the list is not empty
{ int i; WCHAR szBuff[MAX_ATM_ADDRESS_LENGTH+1]; for (i=0; i<nCount; i++) { Tcp_ListBox_GetText(m_pParentDlg->m_hAddressList, i, szBuff);
if (lstrcmpW(szAtmAddress, szBuff) ==0) // If string is already on the list
{ EndDialog(IDCANCEL); } } }
BOOL fArpsDialog = !lstrcmpW(m_szTitle, c_szArpServer); if (m_pParentDlg->m_fEditState == FALSE) // Add new address
{ if (fArpsDialog) { m_pParentDlg->m_strNewArpsAddress = szAtmAddress; } else { m_pParentDlg->m_strNewMarsAddress = szAtmAddress; } } else // if edit, see if string is having a diferent value now
{ if (fArpsDialog) { if(m_pParentDlg->m_strNewArpsAddress != szAtmAddress) m_pParentDlg->m_strNewArpsAddress = szAtmAddress; // update save addresses
else EndDialog(IDCANCEL); } else { if(m_pParentDlg->m_strNewMarsAddress != szAtmAddress) m_pParentDlg->m_strNewMarsAddress = szAtmAddress; // update save addresses
else EndDialog(IDCANCEL); } }
EndDialog(IDOK);
return 0; }
// If the "Cancel" button is pushed
LRESULT CAtmAddressDialog::OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { EndDialog(IDCANCEL); return 0; }
// If the edit box contents is changed
LRESULT CAtmAddressDialog::OnChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& fHandled) { WCHAR buf[2];
// Enable or disable the "Ok" button
// based on whether the edit box is empty
if (::GetWindowText(m_hEditBox, buf, celems(buf)) == 0) ::EnableWindow(m_hOkButton, FALSE); else ::EnableWindow(m_hOkButton, TRUE);
return 0; }
void CAtmAddressDialog::SetTitle(PCWSTR pszTitle) { Assert(pszTitle); lstrcpyW(m_szTitle, pszTitle); }
|