/*--------------------------------------------------------------------------* * * Microsoft Windows * Copyright (C) Microsoft Corporation, 1992 - 00 * * File: archpicker.cpp * * Contents: Implementation file for CArchitecturePicker * * History: 1-Aug-2000 jeffro Created * *--------------------------------------------------------------------------*/ // ArchPicker.cpp : implementation file // #include "stdafx.h" #ifdef _WIN64 // this class is only required on 64-bit platforms #include "amc.h" #include "ArchPicker.h" //#ifdef _DEBUG //#define new DEBUG_NEW //#undef THIS_FILE //static char THIS_FILE[] = __FILE__; //#endif ///////////////////////////////////////////////////////////////////////////// // CArchitecturePicker dialog /*+-------------------------------------------------------------------------* * CArchitecturePicker::CArchitecturePicker * * Constructs a CArchitecturePicker object. *--------------------------------------------------------------------------*/ CArchitecturePicker::CArchitecturePicker ( CString strFilename, // I:name of console file CAvailableSnapinInfo& asi64, // I:available 64-bit snap-ins CAvailableSnapinInfo& asi32, // I:available 32-bit snap-ins CWnd* pParent /*=NULL*/) // I:dialog's parent window : CDialog (CArchitecturePicker::IDD, pParent), m_asi64 (asi64), m_asi32 (asi32), m_strFilename (strFilename), m_eArch (eArch_64bit) { //{{AFX_DATA_INIT(CArchitecturePicker) //}}AFX_DATA_INIT ASSERT (!asi64.m_f32Bit); ASSERT ( asi32.m_f32Bit); } void CArchitecturePicker::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CArchitecturePicker) DDX_Control(pDX, IDC_SnapinList64, m_wndSnapinList64); DDX_Control(pDX, IDC_SnapinList32, m_wndSnapinList32); //}}AFX_DATA_MAP DDX_Radio(pDX, IDC_64Bit, reinterpret_cast(m_eArch)); } BEGIN_MESSAGE_MAP(CArchitecturePicker, CDialog) //{{AFX_MSG_MAP(CArchitecturePicker) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CArchitecturePicker message handlers BOOL CArchitecturePicker::OnInitDialog() { /* * these must be consecutive and match the order of radio buttons on * the dialog */ ASSERT (eArch_64bit == 0); ASSERT (eArch_32bit == 1); ASSERT (GetNextDlgGroupItem(GetDlgItem(IDC_64Bit)) != NULL); ASSERT (GetNextDlgGroupItem(GetDlgItem(IDC_64Bit))->GetDlgCtrlID() == IDC_32Bit); /* * if there are more 32-bit snap-ins than 64-bit snap-ins, default * to running 32-bit; otherwise, default to running 64-bit * (do this before calling CDialog::OnInitDialog so the state of * the radio button will be set correctly when CDialog::OnInitDialog * calls UpdateData) */ if (m_asi32.m_vAvailableSnapins.size() > m_asi64.m_vAvailableSnapins.size()) m_eArch = eArch_32bit; CDialog::OnInitDialog(); /* * put the filename on the dialog */ SetDlgItemText (IDC_ConsoleFileName, m_strFilename); /* * put formatted messages in the info windows */ FormatMessage (IDC_SnapinCount64, m_asi64); FormatMessage (IDC_SnapinCount32, m_asi32); /* * populate the lists */ PopulateList (m_wndSnapinList64, m_asi64); PopulateList (m_wndSnapinList32, m_asi32); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } /*+-------------------------------------------------------------------------* * CArchitecturePicker::FormatMessage * * Retrieves the format text from the given control, formats the message * with the information contained in the given CArchitecturePicker, and * replaces the text in the control with the result. *--------------------------------------------------------------------------*/ void CArchitecturePicker::FormatMessage ( UINT idControl, /* I:control to update */ CAvailableSnapinInfo& asi) /* I:data to use in formatting */ { DECLARE_SC (sc, _T("CArchitecturePicker::FormatMessage")); /* * get the control */ CWnd* pwnd = GetDlgItem (idControl); if (pwnd == NULL) { sc.FromLastError(); return; } /* * get the format string from the control */ CString strFormat; pwnd->GetWindowText (strFormat); /* * format the text */ CString strText; strText.FormatMessage (strFormat, asi.m_vAvailableSnapins.size(), asi.m_cTotalSnapins); /* * put the text in the window */ pwnd->SetWindowText (strText); } /*+-------------------------------------------------------------------------* * CArchitecturePicker::PopulateList * * Puts the names of each snap-in in asi into the given list control. *--------------------------------------------------------------------------*/ void CArchitecturePicker::PopulateList ( CListCtrl& wndList, /* I:control to update */ CAvailableSnapinInfo& asi) /* I:data to use in formatting */ { /* * put a single, full-width column in the list */ CRect rect; wndList.GetClientRect (rect); int cxColumn = rect.Width() - GetSystemMetrics (SM_CXVSCROLL); wndList.InsertColumn (0, NULL, LVCFMT_LEFT, cxColumn); /* * Give the list the imagelist. The imagelist is owned by the * CAvailableSnapinInfo, so make sure the list has LVS_SHAREIMAGELISTS * so it won't delete the image list when it's destroyed. */ ASSERT (wndList.GetStyle() & LVS_SHAREIMAGELISTS); wndList.SetImageList (CImageList::FromHandle (asi.m_himl), LVSIL_SMALL); /* * put each item in the list */ std::vector::iterator it; for (it = asi.m_vAvailableSnapins.begin(); it != asi.m_vAvailableSnapins.end(); ++it) { wndList.InsertItem (-1, it->m_strName.data(), it->m_nImageIndex); } } #endif // _WIN64