////////////////////////////////////////////////////////////////////////////// /*++ Copyright (C) Microsoft Corporation, 1998 - 1999 Module Name: IASVendorSpecificEditorPage.cpp Abstract: Implementation file for the CIASPgVendorSpecAttr class. Revision History: mmaguire 06/25/98 - revised Baogang Yao's original implementation --*/ ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // BEGIN INCLUDES // // standard includes: // #include "Precompiled.h" #include // // where we can find declaration for main class in this file: // #include "IASVendorSpecificEditorPage.h" // // where we can find declarations needed in this file: // #include "iashelper.h" // // END INCLUDES ////////////////////////////////////////////////////////////////////////////// // Some forward declarations of classes used only in this file. ///////////////////////////////////////////////////////////////////////////// // CIASVendorSpecificConformsYes dialog class CIASVendorSpecificConformsYes: public CHelpDialog { DECLARE_DYNCREATE(CIASVendorSpecificConformsYes) // Construction public: CIASVendorSpecificConformsYes(); ~CIASVendorSpecificConformsYes(); // Dialog Data //{{AFX_DATA(CIASVendorSpecificConformsYes) enum { IDD = IDD_IAS_VENDORSPEC_ATTR_CONFORMS_YES }; ::CString m_strDispValue; int m_dType; int m_dFormat; //}}AFX_DATA // Overrides // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CIASVendorSpecificConformsYes) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation private: BOOL m_fInitializing; protected: // Generated message map functions //{{AFX_MSG(CIASVendorSpecificConformsYes) virtual BOOL OnInitDialog(); // afx_msg void OnContextMenu(CWnd* pWnd, ::CPoint point); // afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo); afx_msg void OnSelchangeFormat(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// // CIASVendorSpecificConformsNo dialog class CIASVendorSpecificConformsNo: public CHelpDialog { DECLARE_DYNCREATE(CIASVendorSpecificConformsNo) // Construction public: CIASVendorSpecificConformsNo(); ~CIASVendorSpecificConformsNo(); // Dialog Data //{{AFX_DATA(CIASVendorSpecificConformsNo) enum { IDD = IDD_IAS_VENDORSPEC_ATTR_CONFORMS_NO }; ::CString m_strDispValue; //}}AFX_DATA // Overrides // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CIASVendorSpecificConformsNo) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation private: BOOL m_fInitializing; protected: // Generated message map functions //{{AFX_MSG(CIASVendorSpecificConformsNo) virtual BOOL OnInitDialog(); // afx_msg void OnContextMenu(CWnd* pWnd, ::CPoint point); // afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ////////////////////////////////////////////////////////////////////////////// // Implementation of the CIASPgVendorSpecAttr page. IMPLEMENT_DYNCREATE(CIASPgVendorSpecAttr, CHelpDialog) BEGIN_MESSAGE_MAP(CIASPgVendorSpecAttr, CHelpDialog) //{{AFX_MSG_MAP(CIASPgVendorSpecAttr) ON_BN_CLICKED(IDC_IAS_RADIO_HEX, OnRadioHex) ON_BN_CLICKED(IDC_IAS_RADIO_RADIUS, OnRadioRadius) ON_BN_CLICKED(IDC_RADIO_SELECTFROMLIST, OnRadioSelectFromList) ON_BN_CLICKED(IDC_RADIO_ENTERVERDORID, OnRadioEnterVendorId) ON_BN_CLICKED(IDC_IAS_BUTTON_CONFIGURE, OnButtonConfigure) ON_CBN_SELCHANGE(IDC_IAS_COMBO_VENDORID, OnVendorIdListSelChange) // ON_WM_CONTEXTMENU() // ON_WM_HELPINFO() //}}AFX_MSG_MAP END_MESSAGE_MAP() ////////////////////////////////////////////////////////////////////////////// /*++ CIASPgVendorSpecAttr::CIASPgVendorSpecAttr Constructor --*/ ////////////////////////////////////////////////////////////////////////////// CIASPgVendorSpecAttr::CIASPgVendorSpecAttr() : CHelpDialog(CIASPgVendorSpecAttr::IDD) { TRACE(_T("CIASPgVendorSpecAttr::CIASPgVendorSpecAttr\n")); m_strDispValue = _T(""); //{{AFX_DATA_INIT(CIASPgVendorSpecAttr) m_strName = _T(""); m_dType = 0; m_dFormat = -1; m_dVendorIndex = -1; //}}AFX_DATA_INIT m_bVendorIndexAsID = FALSE; m_fInitializing = TRUE; } ////////////////////////////////////////////////////////////////////////////// /*++ CIASPgVendorSpecAttr::~CIASPgVendorSpecAttr --*/ ////////////////////////////////////////////////////////////////////////////// CIASPgVendorSpecAttr::~CIASPgVendorSpecAttr() { TRACE(_T("CIASPgVendorSpecAttr::~CIASPgVendorSpecAttr\n")); } ////////////////////////////////////////////////////////////////////////////// /*++ CIASPgVendorSpecAttr::DoDataExchange --*/ ////////////////////////////////////////////////////////////////////////////// void CIASPgVendorSpecAttr::DoDataExchange(CDataExchange* pDX) { TRACE(_T("CIASPgVendorSpecAttr::DoDataExchange\n")); CHelpDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CIASPgVendorSpecAttr) DDX_Text(pDX, IDC_IAS_STATIC_ATTRNAME, m_strName); if (m_bVendorIndexAsID) { DDX_Text(pDX, IDC_EDIT_VENDORID, m_dVendorIndex); } //}}AFX_DATA_MAP if ( m_fInitializing ) { // // set the initializing flag -- we shouldn't call custom data verification // routine when initializing, because otherwise we will report an error // for an attribute whose value has never been initialized // m_fInitializing = FALSE; } else { // Even though we validate data in the sub-dialogs, // we need to re-validate it here to make sure, e.g. // the user doesn't leave this dialog after setting // a value with the Non-conformant (hex) editor but then // switch the radio button to be conformant with a // decimal format type. // ISSUE: It would be nice if the error messages from the // validation routines below were a little more sensitive // to our current context and perhaps mentioned // something to the effect that the user should // click the "Configure Attribute..." button. if ( m_fNonRFC ) { // hexadecimal string if(!m_strDispValue.IsEmpty()) DDV_VSA_HexString(pDX, m_strDispValue); } else { // RFC compatible format -- check data validation. switch ( m_dFormat ) { case 1: // decimal integer { if(!m_strDispValue.IsEmpty()) DDV_Unsigned_IntegerStr(pDX, m_strDispValue); } break; case 2: // hexadecimal string { if(!m_strDispValue.IsEmpty()) DDV_VSA_HexString(pDX, m_strDispValue); } break; default: // no error checking for other case break; } // switch } // else } // else } ///////////////////////////////////////////////////////////////////////////// // CIASPgVendorSpecAttr message handlers ////////////////////////////////////////////////////////////////////////////// /*++ CIASPgVendorSpecAttr::OnInitDialog --*/ ////////////////////////////////////////////////////////////////////////////// BOOL CIASPgVendorSpecAttr::OnInitDialog() { TRACE(_T("CIASPgVendorSpecAttr::OnInitDialog\n")); // Initialize the vendor id combo box. CComboBox *pVendorBox = (CComboBox *) GetDlgItem(IDC_IAS_COMBO_VENDORID); CEdit* pVendorIdEdit = (CEdit*) GetDlgItem(IDC_EDIT_VENDORID); _ASSERTE( pVendorBox != NULL ); _ASSERTE( pVendorIdEdit != NULL ); // determine if to use edit box or list if (m_bVendorIndexAsID) { CheckDlgButton(IDC_RADIO_SELECTFROMLIST, 0); // uncheck the RADIUS radio button pVendorBox->EnableWindow(0); CheckDlgButton(IDC_RADIO_ENTERVERDORID, 1); // check pVendorIdEdit->EnableWindow(1); } else { CheckDlgButton(IDC_RADIO_SELECTFROMLIST, 1); // check the RADIUS radio button pVendorBox->EnableWindow(1); CheckDlgButton(IDC_RADIO_ENTERVERDORID, 0); // uncheck pVendorIdEdit->EnableWindow(0); } CHelpDialog::OnInitDialog(); CComPtr spIASNASVendors; HRESULT hrTemp = CoCreateInstance( CLSID_IASNASVendors, NULL, CLSCTX_INPROC_SERVER, IID_IIASNASVendors, (LPVOID *) &spIASNASVendors ); if( SUCCEEDED(hrTemp) ) { LONG lSize; hrTemp = spIASNASVendors->get_Size( &lSize ); if( SUCCEEDED(hrTemp) ) { for ( LONG lIndex = 0; lIndex < lSize ; ++lIndex ) { CComBSTR bstrVendorName; hrTemp = spIASNASVendors->get_VendorName( lIndex, &bstrVendorName ); // Note: If vendor information fails us, we'll put a blank string. int iComboIndex = pVendorBox->AddString( bstrVendorName ); if(iComboIndex != CB_ERR) { pVendorBox->SetItemData(iComboIndex, lIndex); // if selected if(!m_bVendorIndexAsID && m_dVendorIndex == lIndex) pVendorBox->SetCurSel(iComboIndex); } } } } if (m_fNonRFC) { CheckDlgButton(IDC_IAS_RADIO_RADIUS, 0); // uncheck the RADIUS radio button CheckDlgButton(IDC_IAS_RADIO_HEX, 1); // check the non-rfc button } else { CheckDlgButton(IDC_IAS_RADIO_RADIUS, 1); // uncheck the RADIUS radio button CheckDlgButton(IDC_IAS_RADIO_HEX, 0); // check the non-rfc button } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } ////////////////////////////////////////////////////////////////////////////// /*++ CIASPgVendorSpecAttr::OnRadioSelectFromList --*/ ////////////////////////////////////////////////////////////////////////////// void CIASPgVendorSpecAttr::OnRadioSelectFromList() { TRACE(_T("CIASPgVendorSpecAttr::OnRadioSelectFromList\n")); if ( IsDlgButtonChecked(IDC_RADIO_SELECTFROMLIST) ) { m_bVendorIndexAsID = FALSE; } // Initialize the vendor id combo box. CComboBox *pVendorBox = (CComboBox *) GetDlgItem(IDC_IAS_COMBO_VENDORID); CEdit* pVendorIdEdit = (CEdit*) GetDlgItem(IDC_EDIT_VENDORID); _ASSERTE( pVendorBox != NULL ); _ASSERTE( pVendorIdEdit != NULL ); // determine if to use edit box or list if (m_bVendorIndexAsID) { pVendorBox->EnableWindow(0); pVendorIdEdit->EnableWindow(1); } else { pVendorBox->EnableWindow(1); pVendorIdEdit->EnableWindow(0); } } // selection change ... with combo box void CIASPgVendorSpecAttr::OnVendorIdListSelChange() { if(m_bVendorIndexAsID) { // doesn't matter } else { CComboBox *pVendorBox = (CComboBox *) GetDlgItem(IDC_IAS_COMBO_VENDORID); _ASSERTE(pVendorBox != NULL); int iSel = pVendorBox->GetCurSel(); if(iSel != CB_ERR) { m_dVendorIndex = pVendorBox->GetItemData(iSel); } } } ////////////////////////////////////////////////////////////////////////////// /*++ CIASPgVendorSpecAttr::OnRadioEnterVendorId --*/ ////////////////////////////////////////////////////////////////////////////// void CIASPgVendorSpecAttr::OnRadioEnterVendorId() { TRACE(_T("CIASPgVendorSpecAttr::OnRadioEnterVendorId\n")); if ( IsDlgButtonChecked(IDC_RADIO_ENTERVERDORID) ) { m_bVendorIndexAsID = TRUE; } // Initialize the vendor id combo box. CComboBox *pVendorBox = (CComboBox *) GetDlgItem(IDC_IAS_COMBO_VENDORID); CEdit* pVendorIdEdit = (CEdit*) GetDlgItem(IDC_EDIT_VENDORID); _ASSERTE( pVendorBox != NULL ); _ASSERTE( pVendorIdEdit != NULL ); // determine if to use edit box or list if (m_bVendorIndexAsID) { pVendorBox->EnableWindow(0); pVendorIdEdit->EnableWindow(1); } else { pVendorBox->EnableWindow(1); pVendorIdEdit->EnableWindow(0); } } ////////////////////////////////////////////////////////////////////////////// /*++ CIASPgVendorSpecAttr::OnRadioHex --*/ ////////////////////////////////////////////////////////////////////////////// void CIASPgVendorSpecAttr::OnRadioHex() { TRACE(_T("CIASPgVendorSpecAttr::OnRadioHex\n")); if ( IsDlgButtonChecked(IDC_IAS_RADIO_HEX) ) { m_fNonRFC = TRUE; } } ////////////////////////////////////////////////////////////////////////////// /*++ CIASPgVendorSpecAttr::OnRadioRadius --*/ ////////////////////////////////////////////////////////////////////////////// void CIASPgVendorSpecAttr::OnRadioRadius() { TRACE(_T("CIASPgVendorSpecAttr::OnRadioRadius\n")); if ( IsDlgButtonChecked(IDC_IAS_RADIO_RADIUS) ) { m_fNonRFC = FALSE; } } ////////////////////////////////////////////////////////////////////////////// /*++ CIASPgVendorSpecAttr::OnButtonConfigure --*/ ////////////////////////////////////////////////////////////////////////////// void CIASPgVendorSpecAttr::OnButtonConfigure() { TRACE_FUNCTION("CIASPgVendorSpecAttr::OnButtonConfigure"); HRESULT hr; try { CHelpDialog * dialog = NULL; if( m_fNonRFC ) { CIASVendorSpecificConformsNo dialog; // Initialize the sub-dialog. dialog.m_strDispValue = m_strDispValue; int iResult = dialog.DoModal(); if (IDOK == iResult) { // Get data from sub-dialog and store values // to our own variables m_strDispValue = dialog.m_strDispValue; } else { } } else { CIASVendorSpecificConformsYes dialog; // Initialize the sub-dialog. dialog.m_strDispValue = m_strDispValue; dialog.m_dType = m_dType; dialog.m_dFormat = m_dFormat; int iResult = dialog.DoModal(); if (IDOK == iResult) { // Get data from sub-dialog and store values // to our own variables m_strDispValue = dialog.m_strDispValue; m_dType = dialog.m_dType; m_dFormat = dialog.m_dFormat; } else { } } } catch(...) { // Error message } } ////////////////////////////////////////////////////////////////////////////// // Implementation of classes used only in this file. // Implementation for the page we pop up when the user chooses an attribute which conforms. IMPLEMENT_DYNCREATE(CIASVendorSpecificConformsYes, CHelpDialog) BEGIN_MESSAGE_MAP(CIASVendorSpecificConformsYes, CHelpDialog) //{{AFX_MSG_MAP(CIASVendorSpecificConformsYes) // ON_WM_CONTEXTMENU() // ON_WM_HELPINFO() ON_CBN_SELCHANGE(IDC_IAS_COMBO_VENDORSPEC_FORMAT, OnSelchangeFormat) //}}AFX_MSG_MAP END_MESSAGE_MAP() ////////////////////////////////////////////////////////////////////////////// /*++ CIASVendorSpecificConformsYes::CIASVendorSpecificConformsYes Constructor --*/ ////////////////////////////////////////////////////////////////////////////// CIASVendorSpecificConformsYes::CIASVendorSpecificConformsYes() : CHelpDialog(CIASVendorSpecificConformsYes::IDD) { TRACE(_T("CIASVendorSpecificConformsYes::CIASVendorSpecificConformsYes\n")); //{{AFX_DATA_INIT(CIASVendorSpecificConformsYes) m_strDispValue = _T(""); m_dType = 0; m_dFormat = -1; //}}AFX_DATA_INIT m_fInitializing = TRUE; } ////////////////////////////////////////////////////////////////////////////// /*++ CIASVendorSpecificConformsYes::~CIASVendorSpecificConformsYes --*/ ////////////////////////////////////////////////////////////////////////////// CIASVendorSpecificConformsYes::~CIASVendorSpecificConformsYes() { TRACE(_T("CIASVendorSpecificConformsYes::~CIASVendorSpecificConformsYes\n")); } ////////////////////////////////////////////////////////////////////////////// /*++ CIASVendorSpecificConformsYes::DoDataExchange --*/ ////////////////////////////////////////////////////////////////////////////// void CIASVendorSpecificConformsYes::DoDataExchange(CDataExchange* pDX) { TRACE(_T("CIASVendorSpecificConformsYes::DoDataExchange\n")); USES_CONVERSION; CHelpDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CIASVendorSpecificConformsYes) DDX_Text(pDX, IDC_IAS_EDIT_VENDORSPEC_VALUE, m_strDispValue); DDV_MaxChars(pDX, m_strDispValue, 246); DDX_Text(pDX, IDC_IAS_EDIT_VENDORSPEC_TYPE, m_dType); DDV_MinMaxInt(pDX, m_dType, 0, 255); DDX_CBIndex(pDX, IDC_IAS_COMBO_VENDORSPEC_FORMAT, m_dFormat); //}}AFX_DATA_MAP if(m_dFormat == 3) // ipaddress { DWORD IpAddr = 0; if(pDX->m_bSaveAndValidate) // save data to this class { // ip adress control if (0 != SendDlgItemMessage(IDC_IAS_IPADDR_VENDORSPEC_VALUE, IPM_GETADDRESS, 0, (LPARAM)&IpAddr)) { in_addr Tmp_ipAddr; Tmp_ipAddr.s_addr = htonl(IpAddr); m_strDispValue = inet_ntoa(Tmp_ipAddr); }else // no input from USer, m_strDispValue = _T(""); // write to the string } else // put to dialog { // ip adress control if(!m_strDispValue.IsEmpty()) { IpAddr = inet_addr(T2A(m_strDispValue)); IpAddr = ntohl(IpAddr); SendDlgItemMessage(IDC_IAS_IPADDR_VENDORSPEC_VALUE, IPM_SETADDRESS, 0, IpAddr); } } } if ( m_fInitializing ) { // // set the initializing flag -- we shouldn't call custom data verification // routine when initializing, because otherwise we will report an error // for an attribute whose value has never been initialized // m_fInitializing = FALSE; } else { // RFC compatible format -- check data validation. switch ( m_dFormat ) { case 1: // decimal integer { if(!m_strDispValue.IsEmpty()) DDV_Unsigned_IntegerStr(pDX, m_strDispValue); } break; case 2: // hexadecimal string { if(!m_strDispValue.IsEmpty()) DDV_VSA_HexString(pDX, m_strDispValue); } break; case 3: // ipaddress IP address : added F; 211265 default: // no error checking for other case break; } // switch } // else } ///////////////////////////////////////////////////////////////////////////// // CIASVendorSpecificConformsYes message handlers ////////////////////////////////////////////////////////////////////////////// /*++ CIASVendorSpecificConformsYes::OnInitDialog --*/ ////////////////////////////////////////////////////////////////////////////// BOOL CIASVendorSpecificConformsYes::OnInitDialog() { TRACE(_T("CIASVendorSpecificConformsYes::OnInitDialog\n")); CHelpDialog::OnInitDialog(); int iIndex; // initialize the format combo box CComboBox *pFormatBox = (CComboBox *) GetDlgItem(IDC_IAS_COMBO_VENDORSPEC_FORMAT); _ASSERTE( pFormatBox != NULL ); ::CString strFormatStr; strFormatStr.LoadString(IDS_IAS_VSA_FORMAT_STR); pFormatBox ->AddString((LPCTSTR)strFormatStr); strFormatStr.LoadString(IDS_IAS_VSA_FORMAT_DEC); pFormatBox ->AddString((LPCTSTR)strFormatStr); strFormatStr.LoadString(IDS_IAS_VSA_FORMAT_HEX); pFormatBox ->AddString((LPCTSTR)strFormatStr); strFormatStr.LoadString(IDS_IAS_VSA_FORMAT_INetAddr); pFormatBox ->AddString((LPCTSTR)strFormatStr); pFormatBox->SetCurSel(m_dFormat); OnSelchangeFormat(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CIASVendorSpecificConformsYes::OnSelchangeFormat() { // TODO: Add your control notification handler code here CComboBox *pFormatBox = (CComboBox *) GetDlgItem(IDC_IAS_COMBO_VENDORSPEC_FORMAT); int format = pFormatBox->GetCurSel(); if(format == 3) // ipaddress { GetDlgItem(IDC_IAS_EDIT_VENDORSPEC_VALUE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_IAS_IPADDR_VENDORSPEC_VALUE)->ShowWindow(SW_SHOW); } else { GetDlgItem(IDC_IAS_EDIT_VENDORSPEC_VALUE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_IAS_IPADDR_VENDORSPEC_VALUE)->ShowWindow(SW_HIDE); } } // Now the implementation for the page we pop up when the user chooses an attribute // does not conform. IMPLEMENT_DYNCREATE(CIASVendorSpecificConformsNo, CHelpDialog) BEGIN_MESSAGE_MAP(CIASVendorSpecificConformsNo, CHelpDialog) //{{AFX_MSG_MAP(CIASVendorSpecificConformsNo) // ON_WM_CONTEXTMENU() // ON_WM_HELPINFO() //}}AFX_MSG_MAP END_MESSAGE_MAP() ////////////////////////////////////////////////////////////////////////////// /*++ CIASVendorSpecificConformsNo::CIASVendorSpecificConformsNo Constructor --*/ ////////////////////////////////////////////////////////////////////////////// CIASVendorSpecificConformsNo::CIASVendorSpecificConformsNo() : CHelpDialog(CIASVendorSpecificConformsNo::IDD) { TRACE(_T("CIASVendorSpecificConformsNo::CIASVendorSpecificConformsNo\n")); //{{AFX_DATA_INIT(CIASVendorSpecificConformsNo) m_strDispValue = _T(""); //}}AFX_DATA_INIT m_fInitializing = TRUE; } ////////////////////////////////////////////////////////////////////////////// /*++ CIASVendorSpecificConformsNo::~CIASVendorSpecificConformsNo --*/ ////////////////////////////////////////////////////////////////////////////// CIASVendorSpecificConformsNo::~CIASVendorSpecificConformsNo() { TRACE(_T("CIASVendorSpecificConformsNo::~CIASVendorSpecificConformsNo\n")); } ////////////////////////////////////////////////////////////////////////////// /*++ CIASVendorSpecificConformsNo::DoDataExchange --*/ ////////////////////////////////////////////////////////////////////////////// void CIASVendorSpecificConformsNo::DoDataExchange(CDataExchange* pDX) { TRACE(_T("CIASVendorSpecificConformsNo::DoDataExchange\n")); CHelpDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CIASVendorSpecificConformsNo) DDX_Text(pDX, IDC_IAS_EDIT_VENDORSPEC_VALUE, m_strDispValue); DDV_MaxChars(pDX, m_strDispValue, 246); //}}AFX_DATA_MAP if ( m_fInitializing ) { // // set the initializing flag -- we shouldn't call custom data verification // routine when initializing, because otherwise we will report an error // for an attribute whose value has never been initialized // m_fInitializing = FALSE; } else { // hexadecimal string if(!m_strDispValue.IsEmpty()) DDV_VSA_HexString(pDX, m_strDispValue); } } ///////////////////////////////////////////////////////////////////////////// // CIASVendorSpecificConformsNo message handlers ////////////////////////////////////////////////////////////////////////////// /*++ CIASVendorSpecificConformsNo::OnInitDialog --*/ ////////////////////////////////////////////////////////////////////////////// BOOL CIASVendorSpecificConformsNo::OnInitDialog() { TRACE(_T("CIASVendorSpecificConformsNo::OnInitDialog\n")); CHelpDialog::OnInitDialog(); int iIndex; return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }