The information in this article applies to:
- Microsoft Visual Basic Professional and Enterprise Editions,
for Windows, version 5.0
- Standard, Professional, and Enterprise Editions of Microsoft
Visual Basic, 32-bit only, for Windows, version 4.0
SUMMARY
This article provides a code sample and demonstrates how to use the File
Open dialog box in the Comdlg32.dll. Making use of Comdlg32.OCX is a good
reuse of resources under Windows, because Windows always has its dependent
file, Comdlg32.dll, loaded. It provides an easy-to-use interface, but can
be a performance hit. If you use the OCX control, you have to load the
module into memory and also distribute a 90K OCX control to users of your
software. To improve performance, you should minimize the use of controls
in your applications. Instead, you can use the Win32 API calls directly.
If you use the API calls, you may lose some of the functionality that
Comdlg32.OCX offers, such as the Help button. If you require the Help
button, you will need to use the Comdlg32.OCX control.
MORE INFORMATION
Step-by-Step Example
- Start Visual Basic 5.0 and select Standard EXE. If Visual Basic 5.0 is
already running, click New Project on the File menu and select Standard
EXE. Form1 is created by default.
- Place a CommandButton on Form1.
- Add the following code to the Form1 code window:
Option Explicit
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
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
Private Sub Command1_Click()
Dim OpenFile As OPENFILENAME
Dim lReturn As Long
Dim sFilter As String
OpenFile.lStructSize = Len(OpenFile)
OpenFile.hwndOwner = Form1.hWnd
OpenFile.hInstance = App.hInstance
sFilter = "Batch Files (*.bat)" & Chr(0) & "*.BAT" & Chr(0)
OpenFile.lpstrFilter = sFilter
OpenFile.nFilterIndex = 1
OpenFile.lpstrFile = String(257, 0)
OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
OpenFile.lpstrFileTitle = OpenFile.lpstrFile
OpenFile.nMaxFileTitle = OpenFile.nMaxFile
OpenFile.lpstrInitialDir = "C:\"
OpenFile.lpstrTitle = "Use the Comdlg API not the OCX"
OpenFile.flags = 0
lReturn = GetOpenFileName(OpenFile)
If lReturn = 0 Then
MsgBox "The User pressed the Cancel Button"
Else
MsgBox "The user Chose " & Trim(OpenFile.lpstrFile)
End If
End Sub
- Press the F5 key to run the project, and click the CommandButton. You
should see the File Open dialog box appear with the options set.
REFERENCES
The Win32 SDK documents other calls to the Comdlg32.dll such as
ChooseColor, ChooseFont, and GetSaveFileName.
For more information, please see the following articles in the Microsoft
Knowledge Base:
ARTICLE ID: Q106682
TITLE : Default Extension Ignores File Type in VB Common Dialog
ARTICLE ID: Q137194
TITLE : GetOpenFileName nMaxFile Interpreted Incorrectly