You are currently offline, waiting for your internet to reconnect

How To Use a Common Dialog File Open Dialog with Win32 API

This article was previously published under Q161286
This article provides a code sample and demonstrates how to use the FileOpen dialog box in the Comdlg32.dll. Making use of Comdlg32.OCX is a goodreuse of resources under Windows, because Windows always has its dependentfile, Comdlg32.dll, loaded. It provides an easy-to-use interface, but canbe a performance hit. If you use the OCX control, you have to load themodule into memory and also distribute a 90K OCX control to users of yoursoftware. To improve performance, you should minimize the use of controlsin your applications. Instead, you can use the Win32 API calls directly.

If you use the API calls, you may lose some of the functionality thatComdlg32.OCX offers, such as the Help button. If you require the Helpbutton, you will need to use the Comdlg32.OCX control.

Step-by-Step Example

  1. 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.
  2. Place a CommandButton on Form1.
  3. 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						
  4. 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.
The Win32 SDK documents other calls to the Comdlg32.dll such asChooseColor, ChooseFont, and GetSaveFileName.

For more information, please see the following article in the MicrosoftKnowledge Base:
106682 : Default Extension Ignores File Type in VB Common Dialog
kbVBp400 kbVBp500 kbVBp600 kbVBp kbdsd kbDSupport kbintluk KBCONTROL KBWIN32SDK KBAPI

Article ID: 161286 - Last Review: 07/13/2004 14:56:51 - Revision: 2.2

  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
  • kbhowto KB161286