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

📄 crandomdatapage.cpp

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 CPP
字号:
/*____________________________________________________________________________
		Copyright (C) 2002 PGP Corporation
        All rights reserved.

        $Id: CRandomDataPage.cpp,v 1.10 2002/08/06 20:09:24 dallen Exp $
____________________________________________________________________________*/

#include "pgpClassesConfig.h"

#include "CPGPdiskEngine.h"
#include "CPGPdiskPage.h"
#include "CPGPGlobalRandomPool.h"

#include "CRandomDataPage.h"
#include "PGPdiskHelp.h"
#include "Resource.h"

_USING_PGP

_UNNAMED_BEGIN

// Constants

DWORD	WizRandomDataPageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_DISKSTATIC3,		-1, 
	IDC_HEADING,			-1, 
	IDC_RANDOM_CAPTION,		IDH_PGPDISKUI_WIZRANDOMPAGE_RANDOMBAR, 
	IDC_RANDOM_BAR,			IDH_PGPDISKUI_WIZRANDOMPAGE_RANDOMBAR, 
	IDC_RANDOMPER_TEXT,		IDH_PGPDISKUI_WIZRANDOMPAGE_RANDOMBAR, 
	0,						0
};

// Static variables

// Necessary ugliness...
CRandomDataPage	*PRandDataPage;
HHOOK			RandKeyboardHook;

_UNNAMED_END


// Class CRandomDataPage member functions

PGPUInt16 
CRandomDataPage::GetDialogId() const
{
	return IDD_WIZ_RANDOM;
}

DWORD 
CRandomDataPage::GetPageHelpId() const
{
	return IDH_PGPDISKUI_WIZRANDOMPAGE;
}

PVOID 
CRandomDataPage::GetPageHelpIds() const
{
	return WizRandomDataPageHelpIDs;
}

void 
CRandomDataPage::ProcessChar(unsigned char nChar) 
{
	mPRandomPool->AddKeystroke(nChar);
	UpdateBar();
}

LRESULT 
CALLBACK 
CRandomDataPage::KeyboardHook(
	INT		iCode, 
	WPARAM	wParam, 
	LPARAM	lParam) 
{
	pgpAssertAddrValid(PRandDataPage, CRandomDataPage);
	PRandDataPage->ProcessChar(static_cast<unsigned char>(wParam));

	return 1;
}

void 
CRandomDataPage::SetDoneCollecting()
{
	mRandomBar.SetPos(100);
	mRandomPercent.Set(100);

	SetWizButtons(PSWIZB_BACK | PSWIZB_NEXT);

	if (IsntNull(RandKeyboardHook))
	{
		UnhookWindowsHookEx(RandKeyboardHook);
		RandKeyboardHook = NULL;
	}
}

void 
CRandomDataPage::UpdateBar()
{
	if (mCheated)
		return;

	if (mPRandomPool->GetEntropy() >= mEntropyNeeded)
	{
		SetDoneCollecting();
	}
	else
	{
		PGPUInt32	percent	= mPRandomPool->GetEntropy()*100 / mEntropyNeeded;

		mRandomBar.SetPos(percent);
		mRandomPercent.Set(percent);

		SetWizButtons(PSWIZB_BACK);
	}
}

BOOL 
CRandomDataPage::OnInitDialog(HWND focusCtrl)
{
	CPGPdiskPage::OnInitDialog(focusCtrl);

	mBegunGathering = FALSE;

	mRandomPercent.Subclass(GetDlgItem(IDC_RANDOMPER_TEXT));
	mRandomBar.Subclass(GetDlgItem(IDC_RANDOM_BAR));

	mRandomBar.SetRange(0, 100);
	mRandomPercent.Reset();

	return FALSE;
}

void 
CRandomDataPage::OnLButtonDown(PGPUInt32 keyFlags, CPoint coords)
{
	CPGPdiskPage::OnLButtonDown(keyFlags, coords);

#if PGP_DEBUG
	mCheated = TRUE;
	SetDoneCollecting();
#endif	// PGP_DEBUG
}

void 
CRandomDataPage::OnMouseMove(PGPUInt32 keyFlags, CPoint coords)
{
	CPGPdiskPage::OnMouseMove(keyFlags, coords);

	mPRandomPool->MouseMoved();
	UpdateBar();
}

PGPBoolean 
CRandomDataPage::OnPsnKillActive()
{
	PGPBoolean	result	= CPGPdiskPage::OnPsnSetActive();

	if (result)
		return result;

	if (IsntNull(RandKeyboardHook))
	{
		UnhookWindowsHookEx(RandKeyboardHook);
		RandKeyboardHook = NULL;
	}

	return FALSE;
}

PGPInt32 
CRandomDataPage::OnPsnSetActive()
{
	PGPInt32	result	= CPGPdiskPage::OnPsnSetActive();

	if (result != 0)
		return result;

	if (!mBegunGathering)
	{
		mCheated = FALSE;

		mEntropyNeeded = CPGPdiskEngine::GetNeededRandomDataSize(
			*mPAlgorithm) * PFLConstants::kBitsPerByte * 2;

		if (mPRandomPool->GetEntropy() >= mEntropyNeeded)
			return -1;
		else
			mEntropyNeeded += mPRandomPool->GetEntropy();
	}

	UpdateBar();
	PRandDataPage = this;

	RandKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardHook, NULL, 
		GetCurrentThreadId());

	return 0;
}

⌨️ 快捷键说明

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