208 lines
5.6 KiB
C++
208 lines
5.6 KiB
C++
/*--------------------------------------------------------------------------*
|
|
*
|
|
* 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<int&>(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<CBasicSnapinInfo>::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
|