windows-nt/Source/XPSP1/NT/admin/activec/conui/archpicker.cpp
2020-09-26 16:20:57 +08:00

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