| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3041 人关注过本帖
标题:VB6.0-API-SHBrowseForFolder-ulFlags参数问题
取消只看楼主 加入收藏
VBhere
Rank: 2
等 级:论坛游民
帖 子:21
专家分:19
注 册:2010-3-9
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:3 
VB6.0-API-SHBrowseForFolder-ulFlags参数问题
VB6.0-API-SHBrowseForFolder-ulFlags参数问题

1.Public Const BIF_RETURNONLYFSDIRS = &H1   注释:仅允许浏览文件夹(我的电脑、网上邻居时“确认”按钮灰色)
2.Public Const BIF_DONTGOBELOWDOMAIN = &H2  注释:强制用户停留在网上邻居中(注:这是网上说的,我不确定)
3.Public Const BIF_USENEWUI = &H40       注释:有“新建文件夹”按钮

单独用三个参数之一都有效,并且1和2两个合用也有效,但是只要加上3,第1个就失效了(无论是1+2+3,还是1+3)。
这是为什么呢?

[ 本帖最后由 VBhere 于 2010-3-17 01:12 编辑 ]
搜索更多相关主题的帖子: 参数 
2010-03-17 01:09
VBhere
Rank: 2
等 级:论坛游民
帖 子:21
专家分:19
注 册:2010-3-9
收藏
得分:0 
Option Explicit

Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BROWSEINFO) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long

Private Const BIF_RETURNONLYFSDIRS = &H1  '只能选择文件夹
Private Const BIF_USENEWUI = &H40         '对话框上有“新建文件夹”按钮
Private Const MAX_PATH = 260            '路径最大值

Private Type BROWSEINFO
    hOwner As Long                      '主句柄
    pidlRoot As Long                    '展开根目录
    pszDisplayName As String
    lpszTitle As String                 ''列表框标题,这里是用的long,所以得用lstrcat获取字符指针了
    ulFlags As Long                     '规定只能选择文件夹,其他无效
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

Public Function GetFolderPath(frmHwnd As Long) As String

    Dim iNull As Integer, lpIDList As Long
    Dim sPath As String, udtBI As BROWSEINFO

    With udtBI
        .hOwner = frmHwnd                               '设置主窗体句柄
        .lpszTitle = "请选择程序路径"
        .ulFlags = BIF_RETURNONLYFSDIRS Or BIF_USENEWUI       '问题在这行
    End With

    '显示列表框
    lpIDList = SHBrowseForFolder(udtBI)

    If lpIDList Then
        sPath = String$(MAX_PATH, 0)
        '获取返回的路径
        SHGetPathFromIDList lpIDList, sPath
        '释放内存块
        CoTaskMemFree lpIDList
        iNull = InStr(sPath, vbNullChar)               '去除空格符
        If iNull Then sPath = Left$(sPath, iNull - 1)
    End If
    GetFolderPath = sPath
End Function

Private Sub Command1_Click()
    Dim retFolderPath$
    retFolderPath$ = GetFolderPath(Me.hWnd)
    MsgBox IIf(retFolderPath$ <> vbNullString, "你选择了" & retFolderPath$, "你取消了选择"), vbInformation, "提示"
End Sub

问题出在代码中的红字粗体一行,如果写成.ulFlags = BIF_RETURNONLYFSDIRS,则该常数有效果;但是如果写成.ulFlags = BIF_RETURNONLYFSDIRS Or BIF_USENEWUI,则BIF_USENEWUI常数有效,BIF_RETURNONLYFSDIRS常数就无效了,这是为什么?

我去MSDN上找过了,没见到写的这么细致的,着急中……

[ 本帖最后由 VBhere 于 2010-3-17 16:13 编辑 ]
2010-03-17 16:06
VBhere
Rank: 2
等 级:论坛游民
帖 子:21
专家分:19
注 册:2010-3-9
收藏
得分:0 
const BIF_USENEWUI = &H40 时,显示这样
图片附件: 游客没有浏览图片的权限,请 登录注册


const BIF_USENEWUI = &H50 时,显示这样
图片附件: 游客没有浏览图片的权限,请 登录注册

对我的问题没影响,呵呵

[ 本帖最后由 VBhere 于 2010-3-18 19:13 编辑 ]
2010-03-18 18:56
VBhere
Rank: 2
等 级:论坛游民
帖 子:21
专家分:19
注 册:2010-3-9
收藏
得分:0 
没有……

不过我知道了你说的const BIF_USENEWUI = &H50 是因为BIF_USENEWUI 代表两个常数,一个等于&H10,一个等于&H40
2010-03-18 23:20
快速回复:VB6.0-API-SHBrowseForFolder-ulFlags参数问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030131 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved