⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdiskwizvolumeinfopage.cpp

📁 vc环境下的pgp源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////
// CDiskWizVolumeInfoPage.cpp
//
// Implementation of class CDiskWizVolumeInfoPage.
//////////////////////////////////////////////////////////////////////////////

// $Id: CDiskWizVolumeInfoPage.cpp,v 1.9 1999/05/24 23:41:05 heller Exp $

// Copyright (C) 1998 by Network Associates, Inc.
// All rights reserved.

#include "StdAfx.h"
#include <math.h>

#include "Required.h"
#include "PGPdiskPrefs.h"
#include "StringAssociation.h"
#include "UtilityFunctions.h"

#include "CDiskWizardSheet.h"
#include "CDiskWizVolumeInfoPage.h"
#include "File.h"
#include "Globals.h"
#include "PGPdiskHelpIds.h"


/////////////////////
// Context help array
/////////////////////

static PGPUInt32 HelpIds[] =
{
	IDC_SIZE_EDIT,			IDH_PGPDISKAPP_DISKWIZVOLSIZEEDIT, 
	IDC_SIZE_SPIN,			IDH_PGPDISKAPP_DISKWIZVOLSIZESPIN, 
	IDC_DRIVE_COMBO,		IDH_PGPDISKAPP_DISKWIZVOLDRIVECOMBO, 
	IDC_GB_CHECK,			IDH_PGPDISKAPP_DISKWIZVOLGBCHECK, 
	IDC_MB_CHECK,			IDH_PGPDISKAPP_DISKWIZVOLMBCHECK, 
	IDC_KB_CHECK,			IDH_PGPDISKAPP_DISKWIZVOLKBCHECK, 
    IDC_FREESIZE_TEXT,		((PGPUInt32) -1), 
	IDC_SIDEBAR,			((PGPUInt32) -1), 
	0,0 
};


///////////////////////////
// MFC specific definitions
///////////////////////////

BEGIN_MESSAGE_MAP(CDiskWizVolumeInfoPage, CPropertyPage)
	//{{AFX_MSG_MAP(CDiskWizVolumeInfoPage)
	ON_WM_HELPINFO()
	ON_BN_CLICKED(IDC_KB_CHECK, OnKbCheck)
	ON_BN_CLICKED(IDC_MB_CHECK, OnMbCheck)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_GB_CHECK, OnGbCheck)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


////////////
// Constants
////////////

const double	kSizeIsCloseRatio	= 0.95;


//////////////////////////////////////////////////////////////////////////
// CDiskWizVolumeInfoPage public custom functions and non-default handlers
//////////////////////////////////////////////////////////////////////////

IMPLEMENT_DYNCREATE(CDiskWizVolumeInfoPage, CPropertyPage)

// The CDiskWizVolumeInfoPage default constructor.

CDiskWizVolumeInfoPage::CDiskWizVolumeInfoPage()
	 : CPropertyPage(CDiskWizVolumeInfoPage::IDD)
{
	//{{AFX_DATA_INIT(CDiskWizVolumeInfoPage)
	mSizeValue = 0;
	mFreeSizeText = _T("");
	//}}AFX_DATA_INIT

	mParentDiskWiz = NULL;

	// Exorcise the big help button.
	m_psp.dwFlags &= ~PSP_HASHELP;
}

// The CDiskWizVolumeInfoPage destructor.

CDiskWizVolumeInfoPage::~CDiskWizVolumeInfoPage()
{
}


/////////////////////////////////////////////////////////
// CDiskWizVolumeInfoPage public default message handlers
/////////////////////////////////////////////////////////

// OnSetActive is called when this page is made active. We make sure the
// correct buttons are enabled/disabled.

BOOL 
CDiskWizVolumeInfoPage::OnSetActive() 
{
	pgpAssertAddrValid(mParentDiskWiz, CDiskWizardSheet);
	mParentDiskWiz->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT);
	
	return CPropertyPage::OnSetActive();
}

// OnWizardNext is called when the 'Next' button is pressed. We perform
// data validation.

LRESULT 
CDiskWizVolumeInfoPage::OnWizardNext() 
{
	try
	{
		PGPBoolean	failThis	= FALSE;
		PGPUInt32	kbDisk;

		if (CPropertyPage::OnWizardNext() == -1)
			return -1;

		// Get the size value in kilobytes.
		kbDisk = GetSizeValueInKb();

		// Verify that the space being asked is not too big or small.
		if (kbDisk < mLocalMinKbSize)
		{
			failThis = TRUE;
			SetPGPdiskSize(mLocalMinKbSize);

			ReportError(kPGDMajorError_PGPdiskTooSmall);
		}
		else if (kbDisk > App->mPlatformMaxKbSize)
		{
			failThis = TRUE;
			SetPGPdiskSize(mLocalMaxKbSize);

			ReportError(kPGDMajorError_PGPdiskTooBig);
		}
		else if (kbDisk > mLocalMaxKbSize)
		{
			failThis = TRUE;
			SetPGPdiskSize(mLocalMaxKbSize);

			ReportError(kPGDMajorError_NotEnoughDiskSpace);
		}

		// Handle special case where we can't be sure of the amount of free
		// space on the host drive.

		if (mAreWeFailingDiskFree && !failThis)
		{
			CString		dir;
			DualErr		dummyErr;
			PGPBoolean	isEnoughSpace;

			// Get the directory to test.
			dummyErr = GetDirectory(mParentDiskWiz->mPath, &dir);

			// Test if there really is enough space available. If we can't
			// tell then don't fail.

			if (dummyErr.IsntError())
			{
				dummyErr = App->BruteForceTestIfEnoughSpace(dir, kbDisk, 
					&isEnoughSpace);
			}

			if (dummyErr.IsntError())
			{
				if (!isEnoughSpace)
				{
					failThis = TRUE;
					ReportError(kPGDMajorError_NotEnoughDiskSpace);
				}
			}
		}

		if (failThis)
		{
			CString text;

			// Point out the incorrect size entered by the user.
			mSizeEditBox.SetFocus();
			mSizeEditBox.GetWindowText(text);
			mSizeEditBox.SetSel(0, text.GetLength(), FALSE);

			return -1;
		}
		else
		{
			// Remember disk size.
			SetPGPdiskSizeInRegistry();

			mBlocksDisk = ((PGPUInt64) kbDisk * kBytesPerKb) / 
				kDefaultBlockSize;

			return 0;
		}
	}
	catch (CMemoryException *ex)
	{
		ex->Delete();
		return 0;
	}
}


/////////////////////////////////////////////////////////////////////////////
// CDiskWizVolumeInfoPage protected custom functions and non-default handlers
/////////////////////////////////////////////////////////////////////////////

// ConvertControlsAux is a utility function for the 'ConvertControls'
// functions.

void 
CDiskWizVolumeInfoPage::ConvertControlsAux(
	PGPUInt32	nMin, 
	PGPUInt32	nMax, 
	PGPUInt32	kbPerUnit)
{
	// If current size is out of range, change it.
	UpdateData(TRUE);

	if (mSizeValue < nMin)
	{
		mSizeValue = nMin;
	}
	else if (mSizeValue > nMax)
	{
		mSizeValue = nMax;
	}

	// Set ranges of controls.
	mSizeSpin.SetRange(nMin, nMax);

	UpdateData(FALSE);
}

// ConvertControlsToKb converts the dialog's controls to KB.

void 
CDiskWizVolumeInfoPage::ConvertControlsToKb()
{
	mSizeScale = kLCS_KbScale;

	mKbButton.SetCheck(1);
	mMbButton.SetCheck(0);
	mGbButton.SetCheck(0);

	ConvertControlsAux(mLocalMinKbSize, min(kKbPerMeg*2, mLocalMaxKbSize), 1);
}

// ConvertControlsToMb converts the dialog's controls to MB.

void 
CDiskWizVolumeInfoPage::ConvertControlsToMb()
{
	mSizeScale = kLCS_MbScale;

	mKbButton.SetCheck(0);
	mMbButton.SetCheck(1);
	mGbButton.SetCheck(0);

	// Round up if closer than 5%.
	PGPUInt32	mbMax	= mLocalMaxKbSize/kKbPerMeg;

	if (mLocalMaxKbSize%kKbPerMeg > kSizeIsCloseRatio*kKbPerMeg)
		mbMax++;

	ConvertControlsAux(1, min(kMbPerGig*2, mbMax), kKbPerMeg);
}

// ConvertControlsToGb converts the dialog's controls to GB.

void 
CDiskWizVolumeInfoPage::ConvertControlsToGb()
{
	mSizeScale = kLCS_GbScale;

	mKbButton.SetCheck(0);
	mMbButton.SetCheck(0);
	mGbButton.SetCheck(1);

	// Round up if closer than 5%.
	PGPUInt32	gbMax	= mLocalMaxKbSize/kKbPerGig;

	if (mLocalMaxKbSize%kKbPerGig > kSizeIsCloseRatio*kKbPerGig)
		gbMax++;

	ConvertControlsAux(1, gbMax, kKbPerGig);
}

// GetSizeValueInKb returns the current size entered in KB.

PGPUInt32 
CDiskWizVolumeInfoPage::GetSizeValueInKb()
{
	UpdateData(TRUE);

	switch (mSizeScale)
	{
	case kLCS_KbScale:
		return mSizeValue;

	case kLCS_MbScale:
		
		if ((mLocalMaxKbSize%kKbPerMeg > kSizeIsCloseRatio*kKbPerMeg) &&
			(mSizeValue == mLocalMaxKbSize/kKbPerMeg + 1))
		{
			return mLocalMaxKbSize;
		}
		else
		{
			return mSizeValue*kKbPerMeg;
		}

	case kLCS_GbScale:

		if ((mLocalMaxKbSize%kKbPerGig > kSizeIsCloseRatio*kKbPerGig) &&
			(mSizeValue == mLocalMaxKbSize/kKbPerGig + 1))
		{
			return mLocalMaxKbSize;
		}
		else
		{
			return mSizeValue*kKbPerGig;
		}

	default:
		pgpAssert(FALSE);
		return 0;
	}
}

// SetPGPdiskSize sets the size edit box and the slider to the given size.

void 
CDiskWizVolumeInfoPage::SetPGPdiskSize(
	PGPUInt32			kbSize, 
	PGPdiskCreateScale	scale)
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -