📄 cchoosedirdialog.cpp
字号:
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: CChooseDirDialog.cpp,v 1.4 2002/11/02 00:02:23 wjb Exp $
____________________________________________________________________________*/
#include "pgpClassesConfig.h"
#include <shlobj.h>
#include "CChooseDirDialog.h"
#include "CComLibrary.h"
#include "CComObject.h"
#include "CPath.h"
// From the newest SDK.
#define BIF_EDITBOX 0x0010
#define BIF_NEWDIALOGSTYLE 0x0040
#define BIF_USENEWUI (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)
_USING_PGP
// Class CChooseDirDialog member functions
void
CChooseDirDialog::Choose(HWND parentWnd, const char *title, CPath& dir)
{
pgpAssertStrValid(title);
CComLibrary comLibrary;
IMalloc *pMalloc1;
PGPUInt32 result = SHGetMalloc(&pMalloc1);
if (result != NOERROR)
THROW_PGPERROR(kPGPError_Win32COMOpFailed);
CComObject<IMalloc> pMalloc(pMalloc1);
BROWSEINFO browseInfo;
pgpClearMemory(&browseInfo, sizeof(browseInfo));
CPath displayName;
LPITEMIDLIST pidl=NULL;
// Browse from My Computer (local drives)
SHGetSpecialFolderLocation(0,CSIDL_DRIVES,&pidl);
browseInfo.pidlRoot = pidl;
browseInfo.hwndOwner = parentWnd;
browseInfo.pszDisplayName = displayName.GetBuffer(
PFLConstants::kMaxPathLength);
browseInfo.lpszTitle = title;
browseInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI;
LPITEMIDLIST pItemIDList = SHBrowseForFolder(&browseInfo);
displayName.ReleaseBuffer();
if(pidl!=NULL)
{
pMalloc1->Free(pidl);
}
pMalloc1->Release();
try
{
if (IsNull(pItemIDList))
THROW_PGPERROR(kPGPError_UserAbort);
if (!SHGetPathFromIDList(pItemIDList, dir.GetBuffer(
PFLConstants::kMaxPathLength)))
{
dir.ReleaseBuffer();
// THROW_PGPERROR(kPGPError_Win32COMOpFailed);
}
dir.ReleaseBuffer();
pMalloc->Free(pItemIDList);
}
catch (CComboError&)
{
pMalloc->Free(pItemIDList);
throw;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -