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

📄 cdialog.cpp

📁 可以实现对邮件的加密解密以及签名
💻 CPP
字号:
/*____________________________________________________________________________
		Copyright (C) 2002 PGP Corporation
        All rights reserved.

        $Id: CDialog.cpp,v 1.2 2002/08/06 20:10:45 dallen Exp $
____________________________________________________________________________*/

#include "pgpClassesConfig.h"

#include "CDialog.h"
#include "CRect.h"
#include "UModuleInstance.h"

_USING_PGP

// Class CDialog member functions

PGPInt32 
CDialog::CreateModal(HWND parent)
{
	pgpAssert(!WeCreated());
	pgpAssert(!WeSubclassed());

	PGPInt32	result;

	mIsModal = TRUE;

	result	= DialogBoxParam(UModuleInstance::Get(), 
		MAKEINTRESOURCE(GetDialogId()), parent, GlobalDialogProc, 
		reinterpret_cast<LPARAM>(this));

	if (result == -1)
		THROW_ERRORS(kPGPError_Win32WindowOpFailed, GetLastError());

	if (result == IDCANCEL)
		THROW_PGPERROR(kPGPError_UserAbort);
	else if (result == IDDialogError)
		throw mError;

	return result;
}

void 
CDialog::CreateNonModal(HWND parent)
{
	pgpAssert(!WeCreated());
	pgpAssert(!WeSubclassed());

	mIsModal = FALSE;

	HWND	hWnd	= CreateDialogParam(UModuleInstance::Get(), 
		MAKEINTRESOURCE(GetDialogId()), parent, GlobalDialogProc, 
		reinterpret_cast<LPARAM>(this));

	if (IsNull(hWnd))
		THROW_ERRORS(kPGPError_Win32WindowOpFailed, GetLastError());
}

void 
CDialog::DestroyDialog()
{
	pgpAssert(WeCreated());
	pgpAssert(IsWindow(Handle()));

	if (!::DestroyWindow(Handle()))
		THROW_ERRORS(kPGPError_Win32WindowOpFailed, GetLastError());
}

void 
CDialog::RectPixelToDLU(RECT& rect) const
{
	rect.left	= HorizPixelToDLU(rect.left);
	rect.top	= VertPixelToDLU(rect.top);
	rect.right	= HorizPixelToDLU(rect.right);
	rect.bottom	= VertPixelToDLU(rect.bottom);
}

void 
CDialog::RectDLUToPixel(RECT& rect) const
{
	rect.left	= HorizDLUToPixel(rect.left);
	rect.top	= VertDLUToPixel(rect.top);
	rect.right	= HorizDLUToPixel(rect.right);
	rect.bottom	= VertDLUToPixel(rect.bottom);
}

void 
CDialog::CreateAsPropPage(PROPSHEETPAGE& psp, HPROPSHEETPAGE& pageHandle)
{
	mIsModal = TRUE;

	psp.hInstance	= UModuleInstance::Get();
	psp.pszTemplate	= MAKEINTRESOURCE(GetDialogId());
	psp.pfnDlgProc	= PropPageStub;
	psp.lParam		= reinterpret_cast<LPARAM>(this);

	pageHandle = CreatePropertySheetPage(&psp);

	if (IsNull(pageHandle))
		THROW_PGPERROR(kPGPError_Win32CommCtrlOpFailed);
}

void 
CDialog::EndModalDialog(PGPInt32 result)
{
	pgpAssert(WeSubclassed());
	::EndDialog(Handle(), result);
}

void 
CDialog::EndModalDialog(CComboError error)
{
	pgpAssert(WeSubclassed());

	mError = error;
	::EndDialog(Handle(), IDDialogError);
}

void 
CDialog::EndNonModalDialog()
{
	pgpAssert(WeSubclassed());
	DestroyWindow();
}

void 
CDialog::CalcBaseUnits()
{
	CRect	rc(0, 0, 4, 8);
	MapDialogRect(rc);
	
	mBaseUnitX = rc.Right();
	mBaseUnitY = rc.Bottom();
}

void 
CDialog::HandleWindowError(CComboError error)
{
	if (mIsModal)
		EndModalDialog(error);
	else
		CWindow::HandleWindowError(error);
}

BOOL 
CALLBACK 
CDialog::GlobalDialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	try
	{
		if (uMsg == WM_INITDIALOG)
		{
			// New dialog created, subclass window procedure.
			CDialog	*pDialog	= reinterpret_cast<CDialog *>(lParam);

			pgpAssertAddrValid(pDialog, CDialog);
			pDialog->Subclass(hWnd);

			// Handle InitDialog.
			try
			{
				return pDialog->OnInitDialog(reinterpret_cast<HWND>(wParam));
			}
			catch (CComboError& error)
			{
				pDialog->HandleWindowError(error);
				return FALSE;
			}
		}
		else
		{
			return FALSE;
		}
	}
	catch (CComboError&)
	{
		pgpAssert(FALSE);
		return FALSE;
	}
}

BOOL 
CALLBACK 
CDialog::PropPageStub(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	if (uMsg == WM_INITDIALOG)
	{
		return GlobalDialogProc(hWnd, uMsg, wParam, 
			reinterpret_cast<PROPSHEETPAGE *>(lParam)->lParam);
	}

	return FALSE;
}

void 
CDialog::OnCancel()
{
	if (mIsModal)
		EndModalDialog(IDCANCEL);
	else
		EndNonModalDialog();
}

void 
CDialog::OnOk()		
{
	if (mIsModal)
		EndModalDialog(IDOK);
	else
		EndNonModalDialog();
}

BOOL 
CDialog::OnCommand(PGPUInt16 notifyCode, PGPUInt16 itemId, HWND ctrl)
{
	if (notifyCode == BN_CLICKED)
	{
		switch (itemId)
		{
		case IDOK:
			OnOk();
			return TRUE;

		case IDCANCEL:
			OnCancel();
			return TRUE;
		}
	}

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

BOOL 
CDialog::OnInitDialog(HWND focusCtrl)
{
	CalcBaseUnits();
	return CallDefault();
}

⌨️ 快捷键说明

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