这是OpenFileName结构:Private Type OpenFileName lStructSize As Long hwndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type第二个成员hwndOwner的值,指定为你的窗口句柄,就行了MSDN里说得很清楚:hwndOwner Identifies the window that owns the dialog box. This member can be any valid window handle, or it can be NULL if the dialog box has no owner.
都已定义好了,也能GetOpenFileName,打开去选择文件,问题就是每打开一次,有弹出个选文件窗口! With m_ofnFileName .slflags = m_slFlags '如果允许多选,就需要设置 FILENAME_EXPLORER ,否则会崩溃 If (.slflags And FILENAME_ALLOWMULTISELECT) = FILENAME_ALLOWMULTISELECT Then .slflags = .slflags Or FILENAME_EXPLORER slFileSize = 8192 Else slFileSize = 1024 End If .szFile = m_szFileName & String$(slFileSize - Len(m_szFileName), 0) .slMaxFile = slFileSize .szFileTitle = m_szFileTitle & String$(slFileSize - Len(FileTitle), 0) .slMaxTitle = slFileSize slReturn = GetOpenFileName(m_ofnFileName) If slReturn Then ..... end if end with
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type第二个成员hwndOwner的值,指定为你的窗口句柄,就行了MSDN里说得很清楚:hwndOwner
Identifies the window that owns the dialog box. This member can be any valid window handle, or it can be NULL if the dialog box has no owner.
With m_ofnFileName
.slflags = m_slFlags '如果允许多选,就需要设置 FILENAME_EXPLORER ,否则会崩溃 If (.slflags And FILENAME_ALLOWMULTISELECT) = FILENAME_ALLOWMULTISELECT Then
.slflags = .slflags Or FILENAME_EXPLORER
slFileSize = 8192
Else
slFileSize = 1024
End If .szFile = m_szFileName & String$(slFileSize - Len(m_szFileName), 0)
.slMaxFile = slFileSize
.szFileTitle = m_szFileTitle & String$(slFileSize - Len(FileTitle), 0)
.slMaxTitle = slFileSize slReturn = GetOpenFileName(m_ofnFileName) If slReturn Then
.....
end if
end with