小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

發(fā)一個(gè)掏錢還不一定買得到, 真正完美的SHBrowseForFolder瀏覽文件夾方法...

 yyy2k3 2011-06-17
這是老掉牙的SHBrowseForFolder代碼,文件夾的名字一長就露馬腳了。
2011-05-14_142518.jpg

ExpertExchange上掏錢買,高達(dá)9.8分的代碼,也僅僅只能夠讓你在EditBox中顯示完整路徑而已。

這才是完美呈現(xiàn)的最后效果。支持Unicode, 遇到特殊字符不會亂碼。而且即然不打算讓用戶生成新文件夾,那編輯窗口也應(yīng)該屏蔽之。并用它來顯示完整的文件路徑。有興趣的可以自己打開Windows7的磁盤管理看看。編輯框屏蔽鍵盤和修改但支持復(fù)制,這才是完全擁有Windows 7特性的文件夾瀏覽。

2011-05-14_143845.jpg

Option Explicit
Private Declare Function SHBrowseForFolder Lib "shell32" Alias "SHBrowseForFolderW" (lpbi As BrowseInfo) As Long
'Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
'Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatW" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long

Private Type BrowseInfo
  hWndOwner      As Long
  pIDLRoot       As Long
  pszDisplayName As Long
  lpszTitle      As Long
  ulFlags        As Long
  lpfnCallback   As Long
  lParam         As Long
  iImage         As Long
End Type
Private Const BIF_RETURNONLYFSDIRS = &H1
Private Const BIF_DONTGOBELOWDOMAIN = &H2
Private Const BIF_STATUSTEXT = &H4&
Private Const BIF_EDITBOX = &H10
Private Const BIF_BROWSEINCLUDEURLS = &H80
Private Const BIF_RETURNFSANCESTORS = &H8
Private Const BIF_VALIDATE = &H20
Private Const BIF_NEWDIALOGSTYLE = &H40
Private Const BIF_USENEWUI = BIF_EDITBOX Or BIF_NEWDIALOGSTYLE
Private Const BIF_UAHINT = &H100
Private Const BIF_NONEWFOLDERBUTTON = &H200
Private Const BIF_NOTRANSLATETARGETS = &H400
Private Const BIF_BROWSEFORCOMPUTER = &H1000
Private Const BIF_BROWSEFORPRINTER = &H2000
Private Const BIF_BROWSEINCLUDEFILES = &H4000
Private Const BIF_SHAREABLE = &H8000
Private Const BIF_BROWSEFILEJUNCTIONS = &H10000

Private Function BrowseForFolder(TitleInfo As String) As String
  Dim lpIDList As Long
  Dim szTitleInfo() As Byte
'  Dim szTitle As String
  Dim sBuffer As String
  Dim tBrowseInfo As BrowseInfo
'  m_CurrentDirectory = StartDir & vbNullChar
  szTitleInfo = TitleInfo & vbNullChar
'  szTitle = Title
  With tBrowseInfo
    .hWndOwner = hwnd
    .lpszTitle = VarPtr(szTitleInfo(0))
'    .lpszTitle = lstrcat(szTitle, "") 老掉牙的無效指針,淘汰之
'    .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN + BIF_STATUSTEXT 舊樣式
    .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN + BIF_USENEWUI + BIF_NONEWFOLDERBUTTON
    .lpfnCallback = GetAddressofFunction(AddressOf BrowseCallbackProc)  'get address of function.
  End With
  lpIDList = SHBrowseForFolder(tBrowseInfo)
  If (lpIDList) Then
    sBuffer = Space(MAX_PATH)
    SHGetPathFromIDList lpIDList, StrPtr(sBuffer)
    CoTaskMemFree lpIDList '拿了就得還,保持系統(tǒng)干凈一點(diǎn)
    sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
    BrowseForFolder = sBuffer
  Else
    BrowseForFolder = ""
  End If
  
End Function
Private Function GetAddressofFunction(Add As Long) As Long
  GetAddressofFunction = Add
End Function

Private Sub Command1_Click()
Me.Caption = BrowseForFolder("請指定文件夾或驅(qū)動(dòng)器,程序?qū)⒆詣?dòng)搜索出文件的最新位置")
End Sub
在模塊中加入下面的代碼

Option Explicit
Public Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDListW" (ByVal pidList As Long, ByVal lpBuffer As Long) As Long
Public Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
'Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
Public Const MAX_PATH = 260&
Public Const MAX_PATH_UNICODE = 2 * MAX_PATH - 1
Private Const BFFM_INITIALIZED = 1&
Private Const BFFM_SELCHANGED = 2&
Private Const WM_USER = &H400
Private Const BFFM_SETSTATUSTEXT = (WM_USER + 100)
Private Const BFFM_SETSELECTION = (WM_USER + 102)
Private Const WM_SETTEXT = &HC
Private Const EM_SETREADONLY = &HCF
Private Const EM_NOSETFOCUS = (&H1500 + 7)
Private Const WM_KILLFOCUS = &H8

Public Function BrowseCallbackProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal lParam As Long, ByVal lpData As Long) As Long
    Dim lpIDList As Long
  Dim lRet As Long
  Dim sBuffer As String
  Dim Fhwnd As Long
  Dim sysDir As String
  Dim szPath() As Byte
  
  sysDir = Environ("SystemDrive") & "\"
  
  On Error GoTo errhandler
  Select Case uMsg
    Case BFFM_INITIALIZED
      Call SendMessage(hwnd, BFFM_SETSELECTION, True, ByVal sysDir)
      Fhwnd = FindWindowEx(hwnd, 0, "Edit", vbNullString)
      Call SendMessage(Fhwnd, WM_SETTEXT, 0, ByVal sysDir)
'      EnableWindow Fhwnd, 0&
      Call SendMessage(Fhwnd, EM_SETREADONLY, True, ByVal 0&)
      Call SendMessage(Fhwnd, EM_NOSETFOCUS, 0&, ByVal 0&)
      
      
    Case BFFM_SELCHANGED
      sBuffer = Space(MAX_PATH_UNICODE)
      
      lRet = SHGetPathFromIDList(lParam, StrPtr(sBuffer))
            If lRet = 1 Then
'        Call SendMessageT(hwnd, BFFM_SETSTATUSTEXT, 0, sBuffer)
        Fhwnd = FindWindowEx(hwnd, 0, "Edit", vbNullString)
        szPath = sBuffer
        Call SendMessageLong(Fhwnd, WM_SETTEXT, 0, VarPtr(szPath(0)))
        Call SendMessage(Fhwnd, WM_KILLFOCUS, 0&, ByVal 0&)
   
      End If
      
  End Select
errhandler:
  BrowseCallbackProc = 0
End Function

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多