2025-04-27 07:49:33 -04:00

297 lines
7.4 KiB
C++

// Progress.cpp : implementation file
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
//
#include "precomp.h"
#include <wbemidl.h>
#include "SchemaValWiz.h"
#include "SchemaValWizCtl.h"
#include "Progress.h"
#include "WizardSheet.h"
#include "htmlhelp.h"
#include "HTMTopics.h"
#include "WbemRegistry.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define idh_svw_validate _T("hh/wmisdk/errmsg_4x0l.htm") // Valid Class Name
/////////////////////////////////////////////////////////////////////////////
// CProgress property page
IMPLEMENT_DYNCREATE(CProgress, CPropertyPage)
CProgress::CProgress() : CPropertyPage(CProgress::IDD)
{
//{{AFX_DATA_INIT(CProgress)
//}}AFX_DATA_INIT
m_iID = CProgress::IDD;
}
CProgress::~CProgress()
{
}
void CProgress::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CProgress)
DDX_Control(pDX, IDC_TEXT_OBJECT, m_staticObject);
DDX_Control(pDX, IDC_STATICTEXT, m_staticTextExt);
DDX_Control(pDX, IDC_PRE_STATIC, m_staticPre);
DDX_Control(pDX, IDC_PRE_LIST, m_listPre);
DDX_Control(pDX, IDC_PROGRESS, m_Progress);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CProgress, CPropertyPage)
//{{AFX_MSG_MAP(CProgress)
ON_WM_PAINT()
//}}AFX_MSG_MAP
ON_COMMAND(ID_HELP, OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CProgress message handlers
BOOL CProgress::OnSetActive()
{
m_pParent->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT);
while(m_listPre.GetCount()) m_listPre.DeleteString(0);
m_listPre.AddString(_T("* Class Selection:"));
bool bSchema, bList, bAssoc, bDesc;
m_pParent->GetSourceSettings(&bSchema, &bList, &bAssoc, &bDesc);
if(bSchema){
m_listPre.AddString(_T(" (") + m_pParent->GetSchemaName() + _T(" schema)"));
}else{
if(bAssoc && bDesc) m_listPre.AddString(_T(" (Including associators and descendents)"));
else if(bAssoc) m_listPre.AddString(_T(" (Including associators)"));
else if(bDesc) m_listPre.AddString(_T(" (Including descendents)"));
}
CStringArray * pcsaList = m_pParent->GetClassList();
for(int i = 0; i < pcsaList->GetSize(); i++)
m_listPre.AddString(_T(" -") + pcsaList->GetAt(i));
m_listPre.AddString(_T(""));
bool bComp;
m_pParent->GetComplianceSettings(&bComp);
if(bComp) m_listPre.AddString(_T("* Perform CIM/WMI Compliance Checks"));
m_listPre.AddString(_T(""));
bool bW2K, bCompSys, bDevice;
m_pParent->GetW2KSettings(&bW2K, &bCompSys, &bDevice);
if(bW2K){
m_listPre.AddString(_T("* Perform Windows 2000 Logo Checks"));
if(bCompSys) m_listPre.AddString(_T(" Perform Computer System Management Checks"));
if(bDevice) m_listPre.AddString(_T(" Perform Device Management Checks"));
}
m_listPre.AddString(_T(""));
bool bLocal;
m_pParent->GetLocalizationSettings(&bLocal);
if(bLocal) m_listPre.AddString(_T("* Perform Localization Checks"));
return CPropertyPage::OnSetActive();
}
void CProgress::ResetProgress(int iTotal)
{
m_Progress.SetRange(0, iTotal);
}
void CProgress::SetCurrentProgress(int iItem, CString *pcsObject)
{
if(pcsObject) m_staticObject.SetWindowText(*pcsObject);
if(iItem != -1) m_Progress.SetPos(iItem);
}
BOOL CProgress::OnInitDialog()
{
CDialog::OnInitDialog();
// m_staticObject.SetWindowText(_T("Select \"Next >\" to begin validaiton..."));
return TRUE;
}
void CProgress::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
HBITMAP hBitmap;
HPALETTE hPalette;
BITMAP bm;
WORD wRes = MAKEWORD(IDB_PAGEART_BTMP,0);
hBitmap = LoadResourceBitmap( AfxGetInstanceHandle( ),
reinterpret_cast<TCHAR *>(wRes), &hPalette);
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
m_nBitmapW = bm.bmWidth;
m_nBitmapH = bm.bmHeight;
CPictureHolder pic;
pic.CreateFromBitmap(hBitmap, hPalette );
CRect rcTextExt;
m_staticTextExt.GetWindowRect(&rcTextExt);
ScreenToClient(rcTextExt);
if(pic.GetType() != PICTYPE_NONE &&
pic.GetType() != PICTYPE_UNINITIALIZED)
{
OLE_HANDLE hpal; //Object owns the palette
if(pic.m_pPict
&& SUCCEEDED(pic.m_pPict->get_hPal((unsigned int *)&hpal)))
{
HPALETTE hpSave = SelectPalette(dc.m_hDC,hPalette,FALSE);
dc.RealizePalette();
//CRect rcBitmap(0, 0, m_nBitmapW, m_nBitmapH);
dc.FillRect(&rcTextExt, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
pic.Render(&dc, rcTextExt, rcTextExt);
SelectPalette(dc.m_hDC,hpSave,TRUE);
}
}
POINT pt;
pt.x=0;
pt.y=0;
CBrush br3DSHADOW(GetSysColor(COLOR_3DSHADOW));
CBrush br3DHILIGHT(GetSysColor(COLOR_3DHILIGHT));
CRect rcFrame = rcTextExt;
dc.Draw3dRect(rcFrame,GetSysColor(COLOR_3DHILIGHT),
GetSysColor(COLOR_3DSHADOW));
CString csFont = _T("MS Shell Dlg");
CString csOut;
if(!m_pParent->m_bValidating) csOut = _T("Review Options");
else csOut = _T("Validating Schema");
CRect crOut = OutputTextString(&dc, this, &csOut, 8, 10, &csFont, 8, FW_BOLD);
if(!m_pParent->m_bValidating) csOut = _T("Review your selected options before beginning validation.");
else csOut = _T("Please wait while your schema is validated.");
OutputTextString(&dc, this, &csOut, crOut.TopLeft().x + 15, crOut.BottomRight().y + 1,
rcTextExt, &csFont, 8, FW_NORMAL);
// Do not call CDialog::OnPaint() for painting messages
}
void CProgress::OnHelp()
{
CString csPath;
WbemRegString(SDK_HELP, csPath);
CString csData = idh_svw_validate;
HWND hWnd = NULL;
try{
HWND hWnd = HtmlHelp(::GetDesktopWindow(),(LPCTSTR) csPath,HH_DISPLAY_TOPIC,(DWORD) (LPCTSTR) csData);
if(!hWnd){
CString csUserMsg = _T("File hhctrl.ocx is missing. The preferred way to install this file is to install Microsoft Internet Explorer 4.01 or later.");
ErrorMsg(&csUserMsg, S_OK, NULL,TRUE, &csUserMsg, __FILE__, __LINE__ );
}
}catch( ... ){
// Handle any exceptions here.
CString csUserMsg = _T("File hhctrl.ocx is missing. The preferred way to install this file is to install Microsoft Internet Explorer 4.01 or later.");
ErrorMsg(&csUserMsg, S_OK, NULL,TRUE, &csUserMsg, __FILE__, __LINE__ );
}
}
LRESULT CProgress::OnWizardNext()
{
m_pParent->m_bValidating = true;
//disable the buttons
CWnd *pCancel = NULL;
pCancel = m_pParent->GetDlgItem(IDCANCEL);
if(pCancel) pCancel->ModifyStyle(NULL, WS_DISABLED, SWP_SHOWWINDOW);
CWnd *pBack = NULL;
pBack = m_pParent->GetDlgItem(ID_WIZBACK);
if(pBack) pBack->ModifyStyle(NULL, WS_DISABLED, SWP_SHOWWINDOW);
CWnd *pNext = NULL;
pNext = m_pParent->GetDlgItem(ID_WIZNEXT);
if(pNext) pNext->ModifyStyle(NULL, WS_DISABLED, SWP_SHOWWINDOW);
// enable/disable appropriate window items
m_staticPre.ShowWindow(SW_HIDE);
m_listPre.ShowWindow(SW_HIDE);
m_staticObject.ShowWindow(SW_SHOW);
m_Progress.ShowWindow(SW_SHOW);
this->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_INTERNALPAINT | RDW_UPDATENOW);
m_pParent->RedrawWindow();
//Perform the validation
m_pParent->ValidateSchema(this);
return CPropertyPage::OnWizardNext();
}
void CProgress::OnCancel()
{
if(m_pParent->m_bValidating){
}
CPropertyPage::OnCancel();
}
BOOL CProgress::OnQueryCancel()
{
if(m_pParent->m_bValidating) return FALSE;
else return TRUE;
}