笔者偶尔用VB编程。我们知道,在VB中通过交互式对话框获取目录名的方法很多,如用DirList控件,或用CommonDialog控件。但笔者最欣赏的是在Windows系统中如安装驱动程序指明文件路径时出现如图所示的对话框。为了获得那样的目录对话框,在VB中试过许多方法,如对CommonDialog控件的常数等进不同取值,用Windows API函数等等都无法取得,百思不得其解。
一次偶然机会,笔者打开MicoOffice\Office\Micos\Convert8.wiz文件。运行文件中的宏,按下“浏览”按钮,就出现了上图中所示的对话框。于是,逐个查找按钮所对应的代码,并仔细分析后发现:之所以能够出现上图示的对话框,是因为用了Office提供的Convert8.dll中的SelectFolder函数。
于是根据Convert8.wiz的宏思路,利用自已拥有的VB知识,先把Convert8.dll拷贝到c:\windows\system目录下(注意:声明指明Convert8.dll的具体路径),编写获取目录对话框程序。程序的源代码如下:
(Attribute VB_Name = "Module1")(注:该行代码在VB的模块中是不可见的)
Option Explicit
‘常数取值
Global Const ONE_K_BUFF = 1024
Global Const strSEL_FLD_BUTTON_TEXT = "Select"
‘SelectFolder函数声明,注意:1、文件路径根据各自位置而定;
2、函数的变量类型
Declare Function SelectFolder Lib "c:\windows\system\Convert8.dll" _
(ByVal lpstrFileTitle As String, lpcbMaxFileTitle As Long, _
ByRef lpdwRestoreFlag As Long, ByRef lpdwX0 As Long, _
ByRef lpdwY0 As Long, ByVal lpstrSelectButtonText As String, _
ByVal hParentWnd As Long) As Long
Function SelectedPath() As String
‘获取出现目录对话框后的用户选取的目录全名
Dim strPath As String * ONE_K_BUFF '定义目录名为定长字串
Dim lPathSize As Long '目录名的长度
Dim dwRestoreFlag As Long
Dim dwX0 As Long
Dim dwY0 As Long
lPathSize = ONE_K_BUFF
dwRestoreFlag = 0
dwX0 = -1
dwY0 = -1
'调用定义的Convert8.dll中的SelectFolder函数
SelectFolder strPath, lPathSize, dwRestoreFlag, dwX0, dwY0, _
strSEL_FLD_BUTTON_TEXT, 0
'获取目录名
SelectedPath = strPath
'去掉目录名CHr(0)后的无用字符
SelectedPath = Mid(SelectedPath, 1, InStr(1, SelectedPath, Chr(0)) - 1)
End Function
Convert8.dll文件只有22K多点,编写的代码也较精简,占用空间不多。有兴趣的读者不妨把它作为子过程调用,丰富VB程序的界面。当然因受本人知识面等限制,也许有出现上图对话框更高效、更精简、更方便的办法。
本程序在Windows95\98,VB5中文版下通过。
|