以下代码:自定义打开文件夹
问题:当弹出选择窗体时,如何使该窗体位于所有者中心?(它总是位于左上角)Public Function ShowFileDialog() As String
    Dim hwnd
        Dim ofn As OpenFilename
    ofn.lpstrInitialDir = App.Path     '''打开当前目录
    ofn.lStructSize = Len(ofn)
    ofn.lpfnHook = 1
    ofn.hwndOwner = hwnd
    ofn.lpstrFilter = "Skin files (*.skn)" & Chr$(0) & "*.skn" & Chr$(0) & Chr(0) & Chr(0)
    ofn.lpstrFile = String(256, 0)
    ofn.nMaxFile = 255
    ofn.lpstrTitle = "请选择文件..."
    ofn.Flags = &H800000 + &H1000 + &H8 + &H4
    ofn.lpstrDefExt = "skn" + Chr(0)
    GetOpenFileName ofn
    If Mid(ofn.lpstrFile, 1, 1) <> Chr(0) Then ShowFileDialog = ofn.lpstrFile
End Function '
'''''自定义打开文件夹如何使用这段代码=>弹出选择窗体时,该窗体位于所有者中心?

解决方案 »

  1.   

    要想解决这个问题,首先要找出CommonDialog是如何设置其对话框位置。首先在一个Form中放置一个CommonDialog控件,然后不断移动Form在屏幕的位置,并激活CommonDialog。你会发现CommonDialog总是出现在Form的左上角,当Form出现在屏幕的左侧或上部时,这一点非常明显。但当Form出现在屏幕下方或右侧时,CommonDialog会稍微做调整,以确保整个对话框都能显示在屏幕范围内。如果你的Form比较靠近屏幕中心,那么CommonDialog自然也会出现在屏幕中心。利用这一特点,我们可以建立一个空窗体,称为MyCDForm,然后在其上放置一个CommonDialog控件。这个MyCDForm只用来放置CommonDialog控件,没有其他用途。然后输入下面这个函数。 
        Private Function ChooseFile(argLeft As Single, argTop As Single) As Boolean 
         ' 设置为没有文件被选择 
         ChooseFile = False 
         ' 移动MyCDForm位置 
         MyCDForm.Left = argLeft 
         MyCDForm.Top = argTop 
         ' 设置CommonDialog控件 
         MyCDForm!CommonDialog1.CancelError = True 
         On Error GoTo OpenError 
         ' 显示CommonDialog 
         MyCDForm!CommonDialog1.ShowOpen 
         ' 卸载MyCDForm 
         Unload MyCDForm 
         ChooseFile = True 
         Exit Function 
        OpenError: 
         ' 用户按下Cancel键 
         Unload MyCDForm 
         Exit Function 
        End Function 
        当你的程序需要调用Open对话框时,使用ChooseFile就可以了。argLeft和argTop是Open对话框在屏幕上出现的位置的左上角的坐标。从这个函数可以看出,实际上我们是将MyCDForm的位置该为argLeft和argTop,而利用Open对话框的位置总是出现在其父窗口的左上角这一特性来改变Open对话框的屏幕位置。类似地,你也可以显示其他的对话框。如果你想让对话框出现在屏幕中央,则argLeft = (Screen.Width - 对话框宽度) \ 2,argTop = (Screen.Height - 对话框高度) \ 2。对于屏幕大小为800*600个像素,显示Open对话框的情况,这两个值大致均为1500。