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

📄 ceditorwindow.cpp

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 CPP
📖 第 1 页 / 共 4 页
字号:

BOOL 
CDiskProperties::OnCommand(
	PGPUInt16	notifyCode, 
	PGPUInt16	itemId, 
	HWND		ctrl)
{
	switch (itemId)
	{
	case IDC_MOUNTSTART_CHECK:
		OnMountStartupCheck();
		return TRUE;

	case IDC_OVERRIDE_CHECK:
		OnOverrideCheck();
		return TRUE;

	case IDC_REENCRYPT_BUTTON:
		OnReEncryptButton();
		return TRUE;

	case IDC_UNMOUNT_CHECK:
		OnAutoUnmountCheck();
		return TRUE;
	}

	return CDialog::OnCommand(notifyCode, itemId, ctrl);
}

void 
CDiskProperties::OnContextMenu(HWND menuWnd, CPoint coords)
{
	CHelpShower::ShowContextMenu(menuWnd, DiskPropertiesDlgHelpIDs);
}

void 
CDiskProperties::OnHelp(HELPINFO *pInfo)
{
	CHelpShower::ShowForControl(static_cast<HWND>(pInfo->hItemHandle), 
		DiskPropertiesDlgHelpIDs);
}

BOOL 
CDiskProperties::OnInitDialog(HWND focusCtrl)
{
	CDialog::OnInitDialog(focusCtrl);

	mReEncryptButton.Subclass(GetDlgItem(IDC_REENCRYPT_BUTTON));
	mMountStartupCheck.Subclass(GetDlgItem(IDC_MOUNTSTART_CHECK));
	mOverrideCheck.Subclass(GetDlgItem(IDC_OVERRIDE_CHECK));
	mAutoUnmountCheck.Subclass(GetDlgItem(IDC_UNMOUNT_CHECK));
	mCurAlgoEdit.Subclass(GetDlgItem(IDC_CURALGO_EDIT));
	mMinutesEdit.Subclass(GetDlgItem(IDC_MINUTES_EDIT));
	mMinutesText.Subclass(GetDlgItem(IDC_MINUTES_TEXT));
	mMinutesUDCtrl.Subclass(GetDlgItem(IDC_MINUTES_UDCTRL));

	InitControls();

	Center();
	SetForegroundWindow();

	return TRUE;
}


// Class CEditorWindow variables

CIcon	CEditorWindow::WindowIcon;
CCursor	CEditorWindow::WindowCursor;


// Class CEditorWindow member functions

CEditorWindow::CEditorWindow() : mPContext(NULL)
{
	mPPrefs = new EditorWindowPrefs;
}

CEditorWindow::~CEditorWindow()
{
	delete mPPrefs;
}

void 
CEditorWindow::Display(
	const CPGPdiskContext&	context, 
	const char				*path, 
	HWND					owner)
{
	pgpAssertStrValid(path);
	pgpAssert(IsWindow(owner));

	mPContext = &context;
	mPath = path;

	ReadWindowPrefs();

	// Load the accelerator.
	mAccel.Load(UModuleInstance::Get(), MAKEINTRESOURCE(IDR_EDITOR_ACCEL));

	// Create the menu.
	mMainMenu.Load(UModuleInstance::Get(), MAKEINTRESOURCE(IDR_EDITOR_MENU));

	// Create the window.
	CPath	cpath(path), fileName;
	cpath.GetDisplayFileName(fileName);

	CString	title;

	title.Format(UCommonStrings::Get(UCommonStrings::kEditorWindowTitle), 
		fileName.Get());

	Create(kEditorWindowClassName, NULL, title, WS_OVERLAPPEDWINDOW, 0, 
		mPPrefs->posX, mPPrefs->posY, mPPrefs->width, mPPrefs->height, 
		owner, mMainMenu);

	// Enter simple modal loop.
	ShowModal(mAccel);

	// flush prefs
	try
	{
		CPGPclPrefs	prefs(context.PGPclPrefs());
		prefs.Flush();
	}
	catch (CComboError&) { }
}

void 
CEditorWindow::InitClass()
{
	WindowCursor.Load(NULL, IDC_ARROW, TRUE);
	WindowIcon.Load(UModuleInstance::Get(), MAKEINTRESOURCE(IDI_EDITICON));

	RegisterClass(kEditorWindowClassName, 0, 0, 0, WindowIcon, NULL, 
		WindowCursor, reinterpret_cast<HBRUSH>(COLOR_BTNFACE + 1));
}

void 
CEditorWindow::CleanupClass()
{
	UnregisterClass(kEditorWindowClassName);
}

void 
CEditorWindow::ReadWindowPrefs()
{
	CPGPclPrefs	prefs(mPContext->PGPclPrefs());
	CPGPData	prefData;

	try
	{
		prefs.GetData(kPGPPrefDiskEditorWinPos, prefData);

		if (prefData.Size() < sizeof(*mPPrefs))
			THROW_PGPERROR(kPGPError_BadParams);

		pgpCopyMemory(prefData.Get(), mPPrefs, sizeof(*mPPrefs));
	}
	catch (CComboError&)
	{
		mPPrefs->posX				= kDefaultPosX;
		mPPrefs->posY				= kDefaultPosY;
		mPPrefs->width				= kDefaultWidth;
		mPPrefs->height				= kDefaultHeight;
		mPPrefs->diskUserColumns	= kDefaultDiskUserColumns;
		mPPrefs->showToolbar		= kDefaultShowToolbar;
		mPPrefs->largeButtons		= kDefaultLargeButtons;
		mPPrefs->showText			= kDefaultShowText;
		mPPrefs->toolTips			= kDefaultToolTips;

		prefs.SetData(kPGPPrefDiskEditorWinPos, prefData);
	}
}

void 
CEditorWindow::WriteWindowPrefs() const
{
	CRect	wndRect;
	GetWindowRect(wndRect);

	mPPrefs->posX	= wndRect.Left();
	mPPrefs->posY	= wndRect.Top();
	mPPrefs->width	= wndRect.Width();
	mPPrefs->height	= wndRect.Height();

	CPGPclPrefs	prefs(mPContext->PGPclPrefs());
	CPGPData	prefData(const_cast<EditorWindowPrefs *>(mPPrefs), 
		sizeof(*mPPrefs));

	prefs.SetData(kPGPPrefDiskEditorWinPos, prefData);
}

void 
CEditorWindow::ShowStatusBarHelp(PGPUInt16 ctrlId)
{
	using namespace UCommonStrings;

	CommonString	stringID;

	switch (ctrlId)
	{
	// The editor main menu/toolbar.
	case IDM_MOUNT:
		stringID = kEditorMountHelp;
		break;

	case IDM_UNMOUNT:
		stringID = kEditorUnmountHelp;
		break;

	case IDM_REENCRYPT:
		stringID = kEditorReEncryptHelp;
		break;

	case IDM_DISKPROPS:
		stringID = kEditorPropertiesHelp;
		break;

	case IDM_DISKOPTIONS:
		stringID = kEditorOptionsHelp;
		break;

	case IDM_EXIT:
		stringID = kEditorExitHelp;
		break;

	case IDM_ADDUSER:
		stringID = kEditorAddUserHelp;
		break;

	case IDM_REMOVEUSER:
		stringID = kEditorRemUserHelp;
		break;

	case IDM_MOUNTUSING:
		stringID = kEditorMountUsingHelp;
		break;

	case IDM_CHANGEPASS:
		stringID = kEditorChangePassHelp;
		break;

	case IDM_SETASADMIN:
		stringID = kEditorSetAsAdminHelp;
		break;

	case IDM_TOGGLEDISABLE:
		stringID = kEditorToggleDisableHelp;
		break;

	case IDM_TOGGLERO:
		stringID = kEditorToggleROHelp;
		break;

	case IDM_VIEWKIND:
		stringID = kEditorViewKindHelp;
		break;

	case IDM_VIEWRO:
		stringID = kEditorViewROHelp;
		break;

	case IDM_VIEWTOOLBAR:
		stringID = kEditorViewToolbarHelp;
		break;

	case IDM_HELP_CONTENTS:
		stringID = kEditorHelpContentsHelp;
		break;

	case IDM_ABOUTPGP:
		stringID = kEditorAboutPGPHelp;
		break;

	// The disk users context menu.
	case IDM_LOOKUP:
		stringID = kEditorLookupHelp;
		break;

	// The toolbar context menu.
	case IDM_LARGEBUTTONS:
		stringID = kEditorLargeButtonsHelp;
		break;

	case IDM_SHOWTEXT:
		stringID = kEditorShowTextHelp;
		break;

	case IDM_SHOWTOOLTIPS:
		stringID = kEditorShowTooltipsHelp;
		break;

	default:
		mStatusBar.SetText(0, 0, "");
		return;
	}

	mStatusBar.SetText(0, 0, const_cast<char *>(Get(stringID)));
}

void 
CEditorWindow::ResizeUsersView()
{
	CRect	clientRect;
	GetClientRect(clientRect);

	CRect	rebarRect;

	if (mPPrefs->showToolbar)
	{
		mTBRebar.GetWindowRect(rebarRect);
		ScreenToClient(rebarRect);
	}

	CRect	statusBarRect;

	mStatusBar.GetWindowRect(statusBarRect);
	ScreenToClient(statusBarRect);

	CRect	usersRect;

	usersRect.Left()	= kXMarginDiskUsers;
	usersRect.Top()		= rebarRect.Bottom() + kYMarginToolbarDK;
	usersRect.Right()	= clientRect.Right() - kXMarginDiskUsers;
	usersRect.Bottom()	= statusBarRect.Top() - kYMarginDKStatusBar;

	mUsersView.MoveWindow(usersRect.Left(), usersRect.Top(), 
		usersRect.Width(), usersRect.Height());
}

void 
CEditorWindow::ResizeToolbar()
{
	CRect	clientRect;
	GetClientRect(clientRect);

	// Set rebar size.
	mToolbar.AutoSize();

	PGPUInt16	buttonHeight, buttonWidth;
	mToolbar.GetButtonSize(buttonWidth, buttonHeight);

	REBARBANDINFO	rbbInfo;
	pgpClearMemory(&rbbInfo, sizeof(rbbInfo));

	rbbInfo.cbSize		= sizeof(rbbInfo);
	rbbInfo.fMask		= RBBIM_CHILDSIZE | RBBIM_SIZE;
	rbbInfo.cxMinChild	= 0;
	rbbInfo.cyMinChild	= buttonHeight + 4;
	rbbInfo.cx			= clientRect.Right() - kXMarginRebar - 1;

	mTBRebar.SetBandInfo(0, rbbInfo);

	mTBRebar.MoveWindow(kXMarginRebar, kYMarginRebar, rbbInfo.cx, 
		buttonHeight + 4);

	mToolbar.AutoSize();
}

void 
CEditorWindow::ReFillUsersView()
{
	CPGPdiskDisk	disk;
	disk.Open(*mPContext, mPath, TRUE);

	CPGPdiskUserSet	diskUsers;
	disk.ExportUserSet(diskUsers);

	mUsersView.Fill(mPContext, diskUsers);
}

void 
CEditorWindow::CreateUsersView()
{
	mUsersView.Create(Handle(), IDC_EDITORKEYS_VIEW);

	ResizeUsersView();
	ReFillUsersView();

	mUsersView.SetActiveColumns(mPPrefs->diskUserColumns);
	mUsersView.ShowWindow(SW_SHOW);
}

void 
CEditorWindow::CreateStatusBar()
{
	mStatusBar.Create(Handle(), IDC_EDITOR_STATUSBAR);
}

void 
CEditorWindow::CreateToolbar()
{
	using namespace UCommonStrings;

	// Create the rebar.
	mTBRebar.Create(Handle(), IDC_EDITOR_REBAR, WS_BORDER | CCS_NODIVIDER | 
		CCS_NOPARENTALIGN | CCS_NORESIZE | RBS_VARHEIGHT | RBS_BANDBORDERS | 
		RBS_FIXEDORDER);

	REBARINFO	rbInfo;
	pgpClearMemory(&rbInfo, sizeof(rbInfo));

	rbInfo.cbSize	= sizeof(rbInfo);
	rbInfo.fMask	= 0;

	mTBRebar.SetBarInfo(rbInfo);

	// Create the toolbar.
	mToolbar.Create(mTBRebar.Handle(), IDC_EDITOR_TOOLBAR, CCS_NODIVIDER | 
		TBSTYLE_FLAT | (mPPrefs->toolTips ? TBSTYLE_TOOLTIPS : 0));
	mToolbar.SetButtonWidth(0, kMaxButtonWidth);

	// Create private toolbar structures.
	ToolbarButton	*pMount			= new ToolbarButton;
	mButtons.AddTail(pMount);
	ToolbarButton	*pUnmount		= new ToolbarButton;
	mButtons.AddTail(pUnmount);
	ToolbarButton	*pProperties	= new ToolbarButton;
	mButtons.AddTail(pProperties);
	ToolbarButton	*pSep1			= new ToolbarButton;
	mButtons.AddTail(pSep1);
	ToolbarButton	*pAdd		= new ToolbarButton;
	mButtons.AddTail(pAdd);
	ToolbarButton	*pRemUser		= new ToolbarButton;
	mButtons.AddTail(pRemUser);

	// Load appropriate imagelist.
	CDC	dc;
	dc.AttachFromWindow(NULL, TRUE);	// DC for desktop

	PGPUInt32	numBits	= dc.GetDeviceCaps(BITSPIXEL) * 
		dc.GetDeviceCaps(PLANES);
	PGPUInt32	colorFlag, bitmapID;

	if (numBits <= 8)
	{
		colorFlag = ILC_COLOR4;

		if (mPPrefs->largeButtons)
			bitmapID = IDB_TOOLBAR4B;
		else
			bitmapID = IDB_TOOLBAR4BSM;
	}
	else
	{
		colorFlag = ILC_COLOR8;

		if (mPPrefs->largeButtons)
			bitmapID = IDB_TOOLBAR8B;
		else
			bitmapID = IDB_TOOLBAR8BSM;
	}

	CBitmap	bitmap(UModuleInstance::Get(), MAKEINTRESOURCE(bitmapID));

	if (mPPrefs->largeButtons)
	{
		mImages.Create(kXBigImage, kYBigImage, ILC_MASK | colorFlag, 
			kNumToolbarButtons, 0);
	}
	else
	{
		mImages.Create(kXSmallImage, kYSmallImage, ILC_MASK | colorFlag, 
			kNumToolbarButtons, 0);
	}

	mImages.AddMasked(bitmap, ImageIDs::kMaskColor);
	mToolbar.SetImageList(mImages);

	// Add mount button.
	pMount->tbButton.iBitmap	= ImageIDs::kPGPdiskMount;
	pMount->tbButton.idCommand	= IDM_MOUNT;
	pMount->tbButton.fsState	= TBSTATE_ENABLED;
	pMount->tbButton.fsStyle	= TBSTYLE_BUTTON;
	pMount->tbButton.dwData		= reinterpret_cast<PGPUInt32>(pMount);

	pMount->tbButton.iString = (mPPrefs->showText ? 
		mToolbar.AddString(0, Get(kEditorMountCaption)) : NULL);

	pMount->index = mToolbar.AddButtons(1, &pMount->tbButton);

	// Add unmount button.
	pUnmount->tbButton.iBitmap		= ImageIDs::kPGPdiskUnmount;
	pUnmount->tbButton.idCommand	= IDM_UNMOUNT;
	pUnmount->tbButton.fsState		= TBSTATE_ENABLED;
	pUnmount->tbButton.fsStyle		= TBSTYLE_BUTTON;
	pUnmount->tbButton.dwData		= reinterpret_cast<PGPUInt32>(pUnmount);

	pUnmount->tbButton.iString = (mPPrefs->showText ? 
		mToolbar.AddString(0, Get(kEditorUnmountCaption)) : NULL);

	pUnmount->index = mToolbar.AddButtons(1, &pUnmount->tbButton);

	// Add properties button.
	pProperties->tbButton.iBitmap	= ImageIDs::kPGPdiskProps;
	pProperties->tbButton.idCommand	= IDM_DISKPROPS;
	pProperties->tbButton.fsState	= TBSTATE_ENABLED;
	pProperties->tbButton.fsStyle	= TBSTYLE_BUTTON;
	pProperties->tbButton.dwData	= reinterpret_cast<PGPUInt32>(
		pProperties);

	pProperties->tbButton.iString = (mPPrefs->showText ? 
		mToolbar.AddString(0, Get(kEditorPropertiesCaption)) : NULL);
	
	pProperties->index = mToolbar.AddButtons(1, &pProperties->tbButton);

	// Add separator.
	pSep1->tbButton.iBitmap		= 0;
	pSep1->tbButton.idCommand	= 0;
	pSep1->tbButton.fsState		= 0;
	pSep1->tbButton.fsStyle		= TBSTYLE_SEP;
	pSep1->tbButton.dwData		= reinterpret_cast<PGPUInt32>(pSep1);
	pSep1->tbButton.iString		= NULL;
	
	pSep1->index = mToolbar.AddButtons(1, &pSep1->tbButton);

	// Add add user button.
	pAdd->tbButton.iBitmap		= ImageIDs::kPGPdiskAddUser;
	pAdd->tbButton.idCommand	= IDM_ADDUSER;
	pAdd->tbButton.fsState		= TBSTATE_ENABLED;
	pAdd->tbButton.fsStyle		= TBSTYLE_BUTTON;
	pAdd->tbButton.dwData		= reinterpret_cast<PGPUInt32>(pAdd);

⌨️ 快捷键说明

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