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

📄 copenfiledialog.cpp

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

        $Id: COpenFileDialog.cpp,v 1.4 2002/08/06 20:10:46 dallen Exp $
____________________________________________________________________________*/

#include "pgpClassesConfig.h"

#include "CPath.h"
#include "COpenFileDialog.h"
#include "CWindow.h"

_USING_PGP

// Class COpenFileDialog member functions

void 
COpenFileDialog::Choose(
	HWND		parentWnd, 
	CPath&		path, 
	const char	*defaultPath, 
	const char	*title, 
	const char	*filter, 
	const char	*defaultExt)
{
	path.Empty();

	CPath	dir;

	if (IsntNull(defaultPath))
	{
		CPath	cDefaultPath(defaultPath);

		cDefaultPath.GetDirPart(dir);
		cDefaultPath.GetFileNamePart(path);
	}

	try
	{
		pgpClearMemory(&mOfn, sizeof(mOfn));

		// BUGBUG! Specifiy OFN_NOCHANGEDIR or Windows will leak a handle
		// to the last browsed-to directory, preventing PGPdisk unmount.

		mOfn.lStructSize		= sizeof(mOfn);
		mOfn.hwndOwner			= parentWnd;
		mOfn.lpstrFilter		= filter;
		mOfn.lpstrFile			= path.GetBuffer(
			PFLConstants::kMaxPathLength);
		mOfn.nMaxFile			= PFLConstants::kMaxPathLength;
		mOfn.lpstrInitialDir	= dir;
		mOfn.lpstrTitle			= title;
		mOfn.Flags				= OFN_EXPLORER | OFN_FILEMUSTEXIST | 
			OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_ENABLEHOOK;
		mOfn.lpstrDefExt		= defaultExt;
		mOfn.lpfnHook			= OpenDialogHookProc;
		mOfn.lCustData			= reinterpret_cast<long>(this);

		if (!GetOpenFileName(&mOfn))
		{
			CComboError	error;
			error.err = CommDlgExtendedError();

			if (!error.HaveNonPGPError())
				THROW_PGPERROR(kPGPError_UserAbort);
			else
				THROW_ERRORS(kPGPError_Win32WindowOpFailed, error.err);
		}

		path.ReleaseBuffer();
	}
	catch (CComboError&)
	{
		path.ReleaseBuffer();
		throw;
	}
}

UINT 
CALLBACK 
COpenFileDialog::OpenDialogHookProc(
	HWND	hdlg, 
	UINT	uiMsg, 
	WPARAM	wParam, 
	LPARAM	lParam)
{
	if (uiMsg == WM_NOTIFY)
	{
		LPNMHDR	pNM	= reinterpret_cast<LPNMHDR>(lParam);

		if (pNM->code == CDN_INITDONE)
		{
			CWindow	childDlg(hdlg);
			CWindow	parentDlg(childDlg.GetParent());

			parentDlg.Center();
		}
	}

	return 0;
}

⌨️ 快捷键说明

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