Private Function GetFolderValue(wIdx As Integer) As Long ' Returns the value of the system folder constant specified by wIdx ' See BrowsDlg.bas for the system folder nFolder values
' The Desktop If wIdx < 2 Then GetFolderValue = 0
' Programs Folder --> Start Menu Folder ElseIf wIdx < 12 Then GetFolderValue = wIdx
' Desktop Folder --> ShellNew Folder Else ' wIdx >= 12 GetFolderValue = wIdx + 4 End If
End Function
Private Sub optFolder_Click(Index As Integer) ' Save the current option button index m_wCurOptIdx = Index End Sub
Private Function GetReturnType() As Long Dim dwRtn As Long If chkRtnType(0) Then dwRtn = dwRtn Or BIF_RETURNONLYFSDIRS If chkRtnType(1) Then dwRtn = dwRtn Or BIF_DONTGOBELOWDOMAIN ' If chkRtnType(2) Then dwRtn = dwRtn Or BIF_STATUSTEXT ' callback only If chkRtnType(3) Then dwRtn = dwRtn Or BIF_RETURNFSANCESTORS If chkRtnType(4) Then dwRtn = dwRtn Or BIF_BROWSEFORCOMPUTER If chkRtnType(5) Then dwRtn = dwRtn Or BIF_BROWSEFORPRINTER GetReturnType = dwRtn End Function
Private Sub cmdBrowse_Click()
Dim BI As BROWSEINFO Dim nFolder As Long Dim IDL As ITEMIDLIST Dim pIdl As Long Dim sPath As String Dim SHFI As SHFILEINFO
With BI ' The dialog's owner window... .hOwner = Me.hWnd
' Set the Browse dialog root folder nFolder = GetFolderValue(m_wCurOptIdx)
' Fill the item id list with the pointer of the selected folder item, rtns 0 on success ' ================================================== ' If this function fails because the selected folder doesn't exist, ' .pidlRoot will be uninitialized & will equal 0 (CSIDL_DESKTOP) ' and the root will be the Desktop. ' DO NOT specify the CSIDL_ constants for .pidlRoot !!!! ' The SHBrowseForFolder() call below will generate a fatal exception ' (GPF) if the folder indicated by the CSIDL_ constant does not exist!! ' ================================================== If SHGetSpecialFolderLocation(ByVal Me.hWnd, ByVal nFolder, IDL) = NOERROR Then .pidlRoot = IDL.mkid.cb End If
' Initialize the buffer that rtns the display name of the selected folder .pszDisplayName = String$(MAX_PATH, 0)
' Set the dialog's banner text .lpszTitle = "Browsing is limited to: " & optFolder(m_wCurOptIdx).Caption
' Set the type of folders to display & return ' -play with these option constants to see what can be returned .ulFlags = GetReturnType()
End With
' Clear previous return vals before the ' dialog is shown (it might be cancelled) txtPath = "" txtDisplayName = "" pic16Icon.Picture = LoadPicture() ' clears prev icon pic32Icon.Picture = LoadPicture()
' Show the Browse dialog pIdl = SHBrowseForFolder(BI)
' If the dialog was cancelled... If pIdl = 0 Then Exit Sub
' Fill sPath w/ the selected path from the id list ' (will rtn False if the id list can't be converted) sPath = String$(MAX_PATH, 0) SHGetPathFromIDList ByVal pIdl, ByVal sPath
' Display the path and the name of the selected folder txtPath = Left(sPath, InStr(sPath, vbNullChar) - 1) txtDisplayName = Left$(BI.pszDisplayName, _ InStr(BI.pszDisplayName, vbNullChar) - 1)
' Get the 16x16 icon info from the id list using the pidl SHGetFileInfo ByVal pIdl, 0&, SHFI, Len(SHFI), _ SHGFI_PIDL Or SHGFI_ICON Or SHGFI_SMALLICON ' The 16x16 icon handle rtnd in SHFI.hIcon is stretched to 32x32. ' DrawIconEx() will shrink (or stretch) the icon per it's cxWidth & cyWidth params DrawIconEx pic16Icon.hdc, 0, 0, SHFI.hIcon, 16, 16, 0, 0, DI_NORMAL pic16Icon.Refresh
' Get the 32x32 icon info from the id list SHGetFileInfo ByVal pIdl, 0&, SHFI, Len(SHFI), _ SHGFI_PIDL Or SHGFI_ICON ' SHFI.hIcon is OK here so DrawIcon() can be used DrawIcon pic32Icon.hdc, 0, 0, SHFI.hIcon pic32Icon.Refresh
' Frees the memory SHBrowseForFolder() ' allocated for the pointer to the item id list CoTaskMemFree pIdl
End Sub
Private Sub cmdInfo_Click() MsgBox "If a root folder Option Button has no correspnoding folder location " & _ "displayed, then no Registry entry exists for it under:" & vbCrLf & vbCrLf & _ "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" & _ vbCrLf & vbCrLf & "As well, if a root folder Option Button is disabled, the folder " & _ "does not exist in your file system and cannot be dispalyed as the root in the Browse dialog." End Sub
Private Sub cmdQuit_Click() Unload Me End Sub
Private Sub Form_Unload(Cancel As Integer) Set Form1 = Nothing End End Sub