///////////////////////////////////////////////////////////////////////////////// // // Microsoft Windows // Copyright (C) Microsoft Corporation, 2002. // // File: SelectCSPDlg.cpp // // Contents: Implementation of CSelectCSPDlg // //---------------------------------------------------------------------------- // // SelectCSPDlg.cpp : implementation file // #include "stdafx.h" #include "certtmpl.h" #include "SelectCSPDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSelectCSPDlg dialog CSelectCSPDlg::CSelectCSPDlg( CWnd* pParent, CCertTemplate& rCertTemplate, CSP_LIST& rCSPList, int& rnProvDSSCnt) : CHelpDialog(CSelectCSPDlg::IDD, pParent), m_rCertTemplate (rCertTemplate), m_rCSPList (rCSPList), m_rnProvDSSCnt (rnProvDSSCnt), m_nSelected (0), m_bDirty (false) { //{{AFX_DATA_INIT(CSelectCSPDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CSelectCSPDlg::DoDataExchange(CDataExchange* pDX) { CHelpDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSelectCSPDlg) DDX_Control(pDX, IDC_CSP_LIST, m_CSPListbox); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSelectCSPDlg, CHelpDialog) //{{AFX_MSG_MAP(CSelectCSPDlg) ON_BN_CLICKED(IDC_USE_ANY_CSP, OnUseAnyCsp) ON_BN_CLICKED(IDC_USE_SELECTED_CSPS, OnUseSelectedCsps) //}}AFX_MSG_MAP ON_CONTROL(CLBN_CHKCHANGE, IDC_CSP_LIST, OnCheckChange) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSelectCSPDlg message handlers BOOL CSelectCSPDlg::OnInitDialog() { CHelpDialog::OnInitDialog(); CString szCSP; CString szInvalidCSPs; for (POSITION nextPos = m_rCSPList.GetHeadPosition (); nextPos; ) { CT_CSP_DATA* pCSPData = m_rCSPList.GetNext (nextPos); if ( pCSPData ) { if ( pCSPData->m_bConforming ) { int nIndex = m_CSPListbox.AddString (pCSPData->m_szName); ASSERT (nIndex >= 0); if ( nIndex >= 0 ) { if ( pCSPData->m_bSelected ) { m_CSPListbox.SetCheck (nIndex, BST_CHECKED); m_nSelected++; } VERIFY (LB_ERR != m_CSPListbox.SetItemData (nIndex, (DWORD_PTR) pCSPData)); } else { break; } } } } if ( m_nSelected > 0 ) SendDlgItemMessage (IDC_USE_SELECTED_CSPS, BM_SETCHECK, BST_CHECKED); else SendDlgItemMessage (IDC_USE_ANY_CSP, BM_SETCHECK, BST_CHECKED); EnableControls (); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSelectCSPDlg::EnableControls () { if ( m_rCertTemplate.ReadOnly () ) { GetDlgItem (IDC_LABEL)->EnableWindow (FALSE); GetDlgItem (IDC_USE_ANY_CSP)->EnableWindow (FALSE); GetDlgItem (IDC_USE_SELECTED_CSPS)->EnableWindow (FALSE); GetDlgItem (IDC_CSP_LIST_LABEL)->EnableWindow (FALSE); int nCnt = m_CSPListbox.GetCount (); for (int nIndex = 0; nIndex < nCnt; nIndex++) m_CSPListbox.Enable (nIndex, FALSE); GetDlgItem (IDOK)->EnableWindow (FALSE); } else { BOOL bEnable = FALSE; if ( BST_CHECKED == SendDlgItemMessage (IDC_USE_SELECTED_CSPS, BM_GETCHECK) ) bEnable = TRUE; GetDlgItem (IDC_CSP_LIST_LABEL)->EnableWindow (bEnable); int nCnt = m_CSPListbox.GetCount (); for (int nIndex = 0; nIndex < nCnt; nIndex++) m_CSPListbox.Enable (nIndex, bEnable); GetDlgItem (IDOK)->EnableWindow (m_bDirty ? TRUE : FALSE); } } void CSelectCSPDlg::DoContextHelp (HWND hWndControl) { _TRACE(1, L"Entering CSelectCSPDlg::DoContextHelp\n"); switch (::GetDlgCtrlID (hWndControl)) { case IDC_STATIC: case IDC_CSP_LIST_LABEL: break; default: // Display context help for a control if ( !::WinHelp ( hWndControl, GetContextHelpFile (), HELP_WM_HELP, (DWORD_PTR) g_aHelpIDs_IDD_CSP_SELECTION) ) { _TRACE(0, L"WinHelp () failed: 0x%x\n", GetLastError ()); } break; } _TRACE(-1, L"Leaving CSelectCSPDlg::DoContextHelp\n"); } void CSelectCSPDlg::OnCheckChange() { int nSel = m_CSPListbox.GetCurSel (); if ( nSel >= 0 ) { if ( BST_CHECKED == m_CSPListbox.GetCheck (nSel) ) { CT_CSP_DATA* pData = (CT_CSP_DATA*) m_CSPListbox.GetItemData (nSel); ASSERT (pData); if ( pData ) { pData->m_bSelected = true; if ( PROV_DSS == pData->m_dwProvType || PROV_DSS_DH == pData->m_dwProvType ) m_rnProvDSSCnt++; } m_nSelected++; } else { CT_CSP_DATA* pData = (CT_CSP_DATA*) m_CSPListbox.GetItemData (nSel); ASSERT (pData); if ( pData ) { pData->m_bSelected = false; if ( PROV_DSS == pData->m_dwProvType || PROV_DSS_DH == pData->m_dwProvType ) m_rnProvDSSCnt--; } m_nSelected--; } m_bDirty = true; } ASSERT (m_nSelected >= 0); EnableControls (); } void CSelectCSPDlg::OnUseAnyCsp() { // clear all checks and selection int nCnt = m_CSPListbox.GetCount (); for (int nIndex = 0; nIndex < nCnt; nIndex++) { m_CSPListbox.SetCheck (nIndex, BST_UNCHECKED); } for (POSITION nextPos = m_rCSPList.GetHeadPosition (); nextPos; ) { CT_CSP_DATA* pCSPData = m_rCSPList.GetNext (nextPos); if ( pCSPData ) { if ( pCSPData->m_bSelected ) { pCSPData->m_bSelected = false; m_bDirty = true; } } } EnableControls (); } void CSelectCSPDlg::OnUseSelectedCsps() { EnableControls (); }