15,471
社区成员
发帖
与我相关
我的任务
分享
void CComboBoxSt::InitCombBox()
{
LPITEMIDLIST lpDeskTopId,lpDocumentId;
SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&lpDeskTopId);
m_lpIdList[0]=lpDeskTopId;
SHGetSpecialFolderLocation(NULL,CSIDL_MYDOCUMENTS,&lpDocumentId);
m_lpIdList[1]=lpDocumentId;
SHFILEINFO temp;
SHGetFileInfo((LPCTSTR) lpDeskTopId, 0, &temp, sizeof(temp), SHGFI_PIDL | SHGFI_DISPLAYNAME);
AddString(temp.szDisplayName);
SHGetFileInfo((LPCTSTR) lpDocumentId, 0, &temp, sizeof(temp), SHGFI_PIDL | SHGFI_DISPLAYNAME);
AddString(temp.szDisplayName);
m_nDefaultItemCount=2;
LPSHELLFOLDER lpParent;
HRESULT hr;
hr=SHGetDesktopFolder(&lpParent);
LPENUMIDLIST pEnum = NULL;
lpParent->EnumObjects(NULL, SHCONTF_FOLDERS, &pEnum);
DWORD dwFetched = 1;
LPITEMIDLIST pidlTemp;
while (pEnum->Next(1, &pidlTemp, &dwFetched)==S_OK&&dwFetched)
{
LPENUMIDLIST pEnum2=NULL;
LPSHELLFOLDER lpChild;
lpParent->BindToObject(pidlTemp,NULL,IID_IShellFolder,(LPVOID*)&lpChild);
lpChild->EnumObjects(NULL,SHCONTF_FOLDERS,&pEnum2);
LPITEMIDLIST pidlTemp2;
LPITEMIDLIST lpComputeID;
SHGetSpecialFolderLocation(NULL,CSIDL_DRIVES,&lpComputeID);
if ((short)HRESULT_CODE(lpParent->CompareIDs(SHCIDS_ALLFIELDS,pidlTemp,lpComputeID))==0)
{
while(pEnum2->Next(0, &pidlTemp2, &dwFetched)==S_OK && dwFetched)
{
LPITEMIDLIST lpDestId;
lpDestId=afxShellManager->ConcatenateItem(pidlTemp,pidlTemp2);//其实只要把这2个PIDL合成不是VS2008 SP1也行
SHFILEINFO sfi2;
SHGetFileInfo((LPCTSTR) lpDestId, 0, &sfi2, sizeof(sfi2), SHGFI_PIDL | SHGFI_DISPLAYNAME);
m_lpIdList[m_nDefaultItemCount]=lpDestId;
AddString(sfi2.szDisplayName);
m_nDefaultItemCount++;
}
}
dwFetched=0;
}
}
void CDataCofferDlg::InitComboBox()
{
//磁盘驱动器
TCHAR *pszDriveStrings=new TCHAR[100];
TCHAR **ppszDriveName;
int nDriveCount=0;
GetLogicalDriveStrings(100*sizeof(TCHAR),pszDriveStrings);
for (int i=0;i<100;i++)
{
if (pszDriveStrings[i]=='\0'&&pszDriveStrings[i+1]!='\0')
{
nDriveCount++;
}
}
ppszDriveName=new TCHAR*[nDriveCount];
for (int i=0;i<nDriveCount;i++)
{
ppszDriveName[i]=new TCHAR[4];
for (int j=0;j<4;j++)
{
ppszDriveName[i][j]=pszDriveStrings[j];
}
pszDriveStrings=pszDriveStrings+4;
}
TCHAR **ppszVolumeNameBuffer=new TCHAR*[nDriveCount];
TCHAR szSysName[10];
DWORD dwSerivalNum,dwMaxFilenameLen,dwSysFlag;
for (int i=0;i<nDriveCount;i++)
{
ppszVolumeNameBuffer[i]=new TCHAR[30];
memset(ppszVolumeNameBuffer[i],0,30*sizeof(TCHAR));
BOOL bSuccess=GetVolumeInformation(
ppszDriveName[i], // root directory
ppszVolumeNameBuffer[i], // volume name buffer
60, // length of name buffer
&dwSerivalNum, // volume serial number
&dwMaxFilenameLen, // maximum file name length
&dwSysFlag, // file system options
szSysName, // file system name buffer
20 // length of file system name buffer
);
if (!bSuccess||ppszVolumeNameBuffer[i][0]=='\0')
{
UINT uType=GetDriveType(ppszDriveName[i]);
if (uType==DRIVE_REMOVABLE)
memcpy_s(ppszVolumeNameBuffer[i],30*sizeof(TCHAR),_T("可移动磁盘"),sizeof(_T("可移动磁盘")));
else if(uType==DRIVE_FIXED)
memcpy_s(ppszVolumeNameBuffer[i],30*sizeof(TCHAR),_T("本地磁盘"),sizeof(_T("本地磁盘")));
else if(uType==DRIVE_REMOTE)
memcpy_s(ppszVolumeNameBuffer[i],30*sizeof(TCHAR),_T("网络驱动器"),sizeof(_T("网络驱动器")));
else if(uType==DRIVE_CDROM)
memcpy_s(ppszVolumeNameBuffer[i],30*sizeof(TCHAR),_T("CD_ROM"),sizeof(_T("CD_ROM")));
}
}
CString *strDriver=new CString[nDriveCount];
for (int i=0;i<nDriveCount;i++)
{
strDriver[i].Format(_T(" %s (%s)"),ppszVolumeNameBuffer[i],ppszDriveName[i]);
m_ctlComboBox.AddString(strDriver[i]);
}
for (int i=0;i<nDriveCount;i++)
{
delete []ppszVolumeNameBuffer[i];
ppszVolumeNameBuffer[i]=NULL;
delete []ppszDriveName[i];
ppszDriveName[i]=NULL;
}
delete []ppszVolumeNameBuffer;
ppszVolumeNameBuffer=NULL;
delete []ppszDriveName;
ppszDriveName=NULL;
delete []strDriver;
}